我有一个未初始化的 int 指针。打印时始终显示为 0。
但是当检查 NULL 时,它没有通过条件。
有趣的是,这个野指针在没有抛出段错误的情况下取值。
有什么解释吗?
代码如下:
int main (){
int *p1;
int *p2;
int var=90;
printf("p1 = %x\n", p1);
printf("p2 = %x\n", p2);
p1 = &var;
if(p2==NULL)
{return 0;}
*p2 = *p1;
printf("*p2 = %x\n", *p2);
}
输出看起来像这样..
# gcc -std=c99 -o main *.c
# main
p1 = 0
p2 = 0
*p2 = 90
最佳答案
几点:
- 使用
%p
打印void *
指针。 - 空指针的内部值不一定是
0
,尽管在现代机器中通常是这样。 - 取消引用未初始化的指针是未定义的行为,任何事情都可能发生。特别是,这并不意味着段错误总会发生。
总而言之,像这样探索UB并不能证明什么。
关于c - 未初始化的指针与 NULL 和 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27268378/