[英]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;
}
}
當我使用 g++ -std=c++17 在我自己的 mac 上運行它時,我每次都會得到一個隨機整數(這很奇怪,因為 *xd 應該是一個布爾值)。 奇怪的是,這不會發生在像 csacademy 和 onlinegdb 這樣的在線 IDE 上。
if (xd == nullptr) { bool tmp = false; xd = &tmp; }
tmp
是一個自動變量。 它在聲明變量的范圍結束時自動銷毀。 在這種情況下,對象的生命周期在 if 語句結束時結束。 此時,指向變量的指針xd
變為無效。
(*xd)
在這里,你通過一個無效的指針間接。 這是程序絕對不能做的事情。 程序的行為是未定義的。 程序壞了。 不要這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.