簡體   English   中英

帶有布爾指針的奇怪 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;
    }
}

當我使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM