总是提示内存非法,不知是什么原因?

hqycxy 2006-03-24 01:33:36
typedef struct BinaryTree{
struct BinaryTree *lTree, *rTree;
ElemType date;
}*Tree, SizeofTree;

typedef struct LinkStack{
Tree da;
struct LinkStack *next;
}*Stack, SizeofStack;


Status Preorder(Tree T)
{
Status Push(Stack *, Tree);
Tree Pop(Stack *);

Stack s, p;
Tree Pre = NULL;

int lenStack = 1;

s = (Stack)malloc(sizeof(SizeofStack));
p = s->next;
/*p->da = (Tree)malloc(sizeof(SizeofStack)); */
p->da = T; // 这句总是出错。

printf("%c", T->date);

while(lenStack){
if(T->lTree && T->lTree != Pre){
T = T->lTree;
printf("%c", T->date);
Push(&s, T);
lenStack++;
continue;
}

if(T->rTree && T->rTree != Pre) {
T = T->rTree;
printf("%c", T->date);
Push(&s, T);
lenStack++;
continue;
}

Pre = Pop(&s);
lenStack--;
T = s->next->da;
}
return OK;
}
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
睡在床板下_ 2006-03-24
  • 打赏
  • 举报
回复
/*p->da = (Tree)malloc(sizeof(SizeofStack)); */ // TREE是一个指针,不用再申请空间
// 所以这句要注释掉.
p没有申请空间
s = (Stack)malloc(sizeof(SizeofStack));
p = (Stack)malloc(sizeof(SizeofStack)); // 申请空间,不知道lz的s用来做什么
p = s->next;
p->da = T; // OK
jixingzhong 2006-03-24
  • 打赏
  • 举报
回复
/*p->da = (Tree)malloc(sizeof(SizeofStack)); */
p->da = T; // 这句总是出错。
--------------------------
p 没有申请空间 ...

楼主只开辟了 s 的空间 ...
然后 p 是 s->next,也是一个指针,
但是这个指针没有分配指向空间的,

做 p->da = T 访问非法内存空间 ....
expert2000 2006-03-24
  • 打赏
  • 举报
回复
从这里看像是替换用的s
hqycxy 2006-03-24
  • 打赏
  • 举报
回复
s 用作头节点的。(不存数据,方便压栈)
逸学堂 2006-03-24
  • 打赏
  • 举报
回复
/*p->da = (Tree)malloc(sizeof(SizeofStack)); */ // TREE是一个指针,不用再申请空间
// 所以这句要注释掉.
p没有申请空间
s = (Stack)malloc(sizeof(SizeofStack));
p = (Stack)malloc(sizeof(SizeofStack)); // 申请空间,不知道lz的s用来做什么
p = s->next;
p->da = T; // OK
duduhaha 2006-03-24
  • 打赏
  • 举报
回复
还是把完整代码贴出来看看吧.
hqycxy 2006-03-24
  • 打赏
  • 举报
回复
给出了 结构体定义,和出错的函数。请大家帮忙看看。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧