对未初始化指针指向任何地方的事实感到困惑

标签 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指向某个随机位置,看来它必须打印出这个随机位置!

最佳答案

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

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

<小时/>

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

关于对未初始化指针指向任何地方的事实感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863476/

相关文章:

c - 我的代码中是否存在内存泄漏? (使用指针存储字符串)

java - JTextField 无法正常工作

c++ - 错误 C4703 使用了可能未初始化的本地指针变量 'y'

c - 保留寄存器?

c - 使用互斥体和条件变量调度多个线程

c - 使用 Microsoft Visual C++ 6 的 FTP 事务

c++ - 访问冲突读取位置 0xCCCCCCCC

c++ - sizeof(some pointer) 是否总是等于四?

c - 2 的某个大数次方

c++ - 头文件中的 const 变量和静态初始化失败