#include <stdio.h>
int main(void)
{
int *ptr;
printf("%p", ptr); // Error: uninitialized local variable 'ptr' used
// Output is "0"
}
我正在阅读C-FAQ关于空指针。它说未初始化的指针可能指向任何地方。这是否意味着它指向内存中的随机位置?另外,如果这个陈述是正确的,为什么当我尝试 printf("%p",ptr)
时会发生错误?由于未初始化的指针ptr
指向某个随机位置,看来它必须打印出这个随机位置!
最佳答案
统一化auto
变量(指针类型或其他类型)的内容是不确定;实际上,它是最后写入该内存位置的任何内容。这个随机位模式对应于程序中有效地址1的可能性非常低;它甚至可能是陷阱表示(与类型的合法值不对应的位模式)。
尝试取消引用无效的指针值会导致未定义的行为; 任何结果都是可能的。您的代码可能会彻底崩溃,可能会在没有明显问题的情况下运行,也可能会让您的系统处于糟糕的状态。
<小时/>- 即,程序中定义的对象或函数的地址,或者使用
malloc
或类似对象分配的动态对象。
关于对未初始化指针指向任何地方的事实感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863476/