#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
指向某个随机位置,似乎它必须打印出这个随机位置!
答案 0 :(得分:3)
单位化auto
变量(指针类型或其他)的内容是不确定;在实践中,它是最后写入该内存位置的任何内容。这个随机位模式对应程序中有效地址 1 的几率非常低;它甚至可能是陷阱表示(与该类型的合法值不对应的位模式)。
尝试取消引用无效指针值会导致未定义的行为; 任何结果都是可能的。您的代码可能会彻底崩溃,可能会在没有明显的问题的情况下运行,这可能会使您的系统处于不良状态。
<小时/>
malloc
或类似内容分配的动态对象。