我有以下代碼:
#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 上。
uj5u.com熱心網友回復:
if (xd == nullptr) { bool tmp = false; xd = &tmp; }
tmp
是一個自動變數。它在宣告變數的范圍結束時自動銷毀。在這種情況下,物件的生命周期在 if 陳述句結束時結束。此時,指向變數的指標xd
變為無效。
(*xd)
在這里,你通過一個無效的指標間接。這是程式絕對不能做的事情。程式的行為是未定義的。程式壞了。不要這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480185.html