嗨,专家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时,没有关于分段错误的错误? 为什么?
答案 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是可能的结果之一。