c - 序列栈和结构体指针

标签 c

我想写一个二叉树遍历算法,将二叉树节点的结构体指针压入序列栈中,但是申请内存的时候遇到了问题,就是S->data = (tNode*)malloc(sizeof(tNode ) * maxSize); 这句话有问题,每次调试都停在这 block 。但不知道正确的解决办法是什么,求解答。

typedef struct TreeNode {
    char data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode, *tNode;

typedef struct sNode {
    tNode* data;
    int top;
    int maxSize;
} sNode, *Stack;

Status createStack(Stack S,int maxSize) {
    S->data = (tNode*) malloc(sizeof(tNode) *maxSize);
    S->top = -1;
    S->maxSize = maxSize;
    return OK;
}

最佳答案

tnode 是一种指向结构的指针

所以,当你使用

S->data = (tNode*)malloc(sizeof(tNode ) * maxSize);

您正在使用(tnode*)进行类型转换,您正在使用指向结构体的指针。此外,分配的内存的大小将是指针的大小,而不是结构的大小。此外,您不应该对 malloc 调用的结果进行类型转换。

Stack 的 typedef 也使用指向结构体指针的指针。我想这不是您想要的应用程序。

你应该使用

typedef struct sNode {
    TreeNode* data;
    int top;
    int maxSize;
} sNode, *Stack;

然后您可以将内存分配为

S->data = malloc(sizeof(TreeNode) * maxsize);

关于c - 序列栈和结构体指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610770/

相关文章:

c - 如何使两个双指针相等

c - 如何在没有内存屏障的情况下实现 InterlockedIncrement

调试代码后找不到问题所在

在C中将较长的字符串复制为较短的字符串

c - PEM_read_RSAPrivateKey : Getting RSA key public modulus and exponent

c++ - 将 HTTP 连接绑定(bind)到特定适配器(提示 : Metered Connection)

c - 从 fgets() 输入中删除尾随换行符

c - 在 C 中打开性能

c - N 个指向函数的指针的数组返回指向函数的指针

c - 崩溃的 Pop() 函数