结构和分段错误

时间:2015-02-03 10:24:48

标签: c struct segmentation-fault

#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);

我运行此代码,我遇到了分段错误 代码没有做具体的事情,我只是想知道为什么分段错误。

2 个答案:

答案 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()