关于未初始化指针指向任何地方这一事实的困惑

时间:2016-08-10 02:48:16

标签: c pointers initialization

#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指向某个随机位置,似乎它必须打印出这个随机位置!

1 个答案:

答案 0 :(得分:3)

单位化auto变量(指针类型或其他)的内容是不确定;在实践中,它是最后写入该内存位置的任何内容。这个随机位模式对应程序中有效地址 1 的几率非常低;它甚至可能是陷阱表示(与该类型的合法值不对应的位模式)。

尝试取消引用无效指针值会导致未定义的行为; 任何结果都是可能的。您的代码可能会彻底崩溃,可能会在没有明显的问题的情况下运行,这可能会使您的系统处于不良状态。

<小时/>

  1. 即,程序中定义的对象或函数的地址,或者使用malloc或类似内容分配的动态对象。