我不明白为什么,如果我从下面的代码中删除注释,就会出现段错误。
#include <stdio.h>
int main(){
int var = 9;
int *ptr;
*ptr = 20;
int *ptrD;
*ptrD = 26;
printf("var %d\n", var);
printf("*ptr %d\n", *ptr);
printf("*ptrD %d\n", *ptrD);
*ptr = 18;
printf("*ptr %d\n", *ptr);
*ptrD = 24;
printf("*ptrD %d\n", *ptrD);
return 0;
}
最佳答案
在您的代码中,
printf("*ptrD %d\n", *ptrD);
ptrD
未初始化,它指向某个随机位置。效果:undefined behavior .
同样的情况
*ptrD = 26;
printf("*ptrD %d\n", *ptrD);
也是。
也许你想要,(但错过了)
ptrD = &var;
作为定义之后的下一个语句。
[P.S - 你应该庆幸的是,由于 UB 的原因,应用程序没有使用你的信用卡为你的所有同事订购披萨和小马。开个玩笑,一旦你达到了 UB,就没有什么,绝对没有任何保证。]
关于c - 两个指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451526/