我想编写一个二叉树遍历算法,以将二叉树节点的结构指针推入序列堆栈中,但是当我申请内存时,我遇到了一个问题,就是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;
}
答案 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);