未初始化的指针,指向零

时间:2018-07-04 11:32:13

标签: c++ pointers initialization

#include <iostream>
int main() {
    int* pt;
    std::cout << pt << std::endl;
    if(pt)
        std::cout << "true" << std::endl;
    else
        std::cout << "false" << std::endl;
    return 0;
}

此代码段评估为false。更何况它会打印0英寸

    std::cout << pt << std::endl;

我认为未初始化的指针指向某个随机地址,该地址可能包含垃圾值。在这种情况下,它指向0值,就像我将其分配给nullptr一样。有人可以为我澄清一下吗?

1 个答案:

答案 0 :(得分:0)

由于指针未初始化使用,因此此代码调用未定义行为(UB)。

使用警告标志时,编译器应发出警告,例如-Wall

warning: 'pt' is used uninitialized in this function [-Wuninitialized]
     std::cout << pt << std::endl;
                  ^~

碰巧的是,在您的系统上运行时,它具有空指针的行为。这意味着指针占用的垃圾值恰好为0。但是请注意,kernel zeroes appear relatively often