嗨,在专家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测试c的时候没问题,没有分段错误?为什么?
发布于 2017-09-06 10:52:45
*p=17;P指向invaid内存,你正在那里存储一个值。
当你写入无效内存时,它会导致未定义的行为,你可能是幸运的程序没有在段错误中出错。
发布于 2017-09-06 10:52:45
我在你的程序中多加了一行。它是核心转储的。当您尝试访问指针变量时,它将核心转储,因为您没有为指针变量p分配内存。
#include <stdio.h>
int main()
{
int *p =0;
*p = 17;
printf("%d",*p);
return 0;
}发布于 2017-09-06 11:00:29
P应该存储整数的地址,但是它存储的是0。然后,您将访问地址0并在那里存储17。0可能甚至不是有效地址,因此行为未定义。Segfault是其中一种可能的结果。
https://stackoverflow.com/questions/46066016
复制相似问题