我想写一个二叉树遍历算法,将二叉树节点的结构体指针压入序列栈中,但是申请内存的时候遇到了问题,就是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/