#include<stdio.h>
#include<stdlib.h>
main()
{
typedef struct tnode *pad;
struct tnode{
int data;
pad left;
pad right;
};
pad p=NULL;
p=malloc(sizeof(struct tnode));
(p->data)=5;
(p->left)=malloc(sizeof(struct tnode));
(p->left)->data=4;
(p->right)=malloc(sizeof(struct tnode));
(p->right)->data=7;
printf("\nroot is %d right %d left %d",p->data,(p->left)->data,(p->right)->data);
我运行此代码,我遇到了分段错误 代码没有做具体的事情,我只是想知道为什么分段错误。
答案 0 :(得分:1)
我尝试在ideone.com上运行它并且工作正常,(printf()函数打印它应该打印的内容,然后之后它会产生“运行时错误”。
然后我在结尾添加了一个“return 0”,它没有任何错误。
为编译器提供正确的参数,使其为大量常见编程错误提供适当的警告。在你的情况下,你错误地指定了你的main()函数(它应该返回'int'),但是编译器在传统的C模式下编译它,所以它并没有警告你。然后,由于原型缺少返回类型,编译器也没有警告您缺少返回语句。如果您开始使用-Wall
(或编译器理解为“启用所有警告”的任何其他标志),您将免于很多麻烦。)
答案 1 :(得分:0)
您的代码看起来很好,并且您可能看到崩溃的唯一原因是malloc()
可能已失败并且您正在尝试访问未分配的内存。
p=malloc(sizeof(struct tnode));
if( p != NULL)
{
//Do your stuff
}
else
return 1;
同样检查malloc()
其余部分的返回值,一旦使用内存完成,请将其释放free(p)
PS:main()
应为int main()