带有布尔指针的奇怪 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)
在这里,您通过一个无效的指针间接访问。这是程序绝不能做的事情。程序的行为是未定义的。程序坏了。不要这样做。
我有以下代码:
#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)
在这里,您通过一个无效的指针间接访问。这是程序绝不能做的事情。程序的行为是未定义的。程序坏了。不要这样做。