序列堆栈和结构指针

时间:2019-04-10 10:52:31

标签: c

我想编写一个二叉树遍历算法,以将二叉树节点的结构指针推入序列堆栈中,但是当我申请内存时,我遇到了一个问题,就是S->data = (tNode*)malloc(sizeof(tNode ) * maxSize);出现问题,每次在此块中停止调试时。但是我不知道什么是正确的解决方案,并寻求答案。

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;
}

1 个答案:

答案 0 :(得分:0)

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);