gpt4 book ai didi

c - 序列栈和结构体指针

转载 作者:行者123 更新时间:2023-11-30 16:19:30 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com