带有布尔指针的奇怪 C++ 输出

Strange C++ output with boolean pointer

我有以下代码:

#include <iostream>
using namespace std;

int main() {
    int n = 2;
    string s = "AB";
    bool* xd = nullptr;
    for (int i = 0; i < n; i += 100) {
        if (xd == nullptr) {
            bool tmp = false;
            xd = &tmp;
        }
        cout << "wtf: " << " " << (*xd) << " " << endl;
    }
}

当我 运行 我自己 mac 使用 g++ -std=c++17 时,我每次都会得到一个随机整数(这很奇怪,因为 *xd 应该是 bool) .奇怪的是,这不会发生在像 csacademy 和 onlinegdb 这样的在线 IDE 上。

if (xd == nullptr) {
    bool tmp = false;
    xd = &tmp;
}

tmp是一个自动变量。它在声明变量的范围的末尾自动销毁。在这种情况下,对象的生命周期在 if-statement 结束时结束。在,指向变量的指针xd失效。

(*xd)

在这里,您通过一个无效的指针间接访问。这是程序绝不能做的事情。程序的行为是未定义的。程序坏了。不要这样做。