是真的导致分段错误(专家C编程7.7)

时间:2017-09-06 02:49:08

标签: c

嗨,专家C编程7.7节中有一个例子会引起分段错误。

  int *p =0;
  *p =17; /*caused segmentation fault */

但我测试如下:

#include <stdio.h>
int main()
{
        int *p =0;
        *p = 17;
        return 0;
}

当我在做gcc -c test.c时,没有关于分段错误的错误? 为什么?

3 个答案:

答案 0 :(得分:0)

*p=17;

指向invaid内存,你正在那里存储一个值。

当你写入无效内存时导致未定义的行为,你可能幸运的是程序没有错误的段错误。

答案 1 :(得分:0)

我在你的程序中再添加一行。这是核心倾销。当你试图访问指针变量时,它会进行核心转储,因为你没有为指针变量p分配内存。

    #include <stdio.h>
    int main()
    {
            int *p =0;
            *p = 17;
            printf("%d",*p);
            return 0;
    }

答案 2 :(得分:0)

p应该存储一个整数的地址,然而,它存储0.然后,你正在访问地址0并在那里存储17。 0可能甚至不是有效地址,因此行为未定义。 Segfault是可能的结果之一。