为什么在段错误的下一行调用&p会让上一行的报错也消失?
来源:1-3 C语言中的特殊指针
黑鸽
2023-07-15 19:55:15
#include <stdio.h> int main() { int *p; *p = 800; printf("*p = %d\n", *p); return 0; }
在这段代码中,报
Segmentation fault (core dumped)
错误的应该是
*p = 800;
这一行吧,但是我在这行后面加一句&p的打印,代码就变的没有问题了,是为什么?
即:
#include <stdio.h> int main() { int *p; *p = 800; printf("&p = %p\n", &p); printf("*p = %d\n", *p); return 0; }
打印结果显示 *p=800也是赋值成功的:
&p = 0x7ffc1a6707a0
*p = 800
另外,我之前的是这样写的:
#include <stdio.h> int main() { int *p; &p *p = 800; printf("*p = %d\n", *p); return 0; }
我的理解是在报错代码之前调用了&p,是不是导致了p指针的初始化,打印显示默认初始化的*p是1,这样就不会出现野指针错误,但是上面的代码是在报错代码之后调用的&p,为什么也会导致报错消失了?有点不理解!
1回答
大白老师
2023-07-15
相似问题