解引用空指針問題

今天看到一段奇怪的代碼,它的主要流程是這樣的:函數

void set()
{
    Test* p = nullptr;
    Test *a = new Test;
    *p = a;
    std::cout << p->getMember() << "\n";
}

第一感受這代碼確定是有問題的,應該是編譯不過至少應該會有warning,但事實證實這段代碼能夠編譯經過,並且也沒有warning。(雖然這段代碼確實是錯誤的)指針

類Test的定義大體以下:code

class Test {
    public:
        Test():member(0){};
        Test(const Test* c) : member(c->member){};
        int getMember() const
        {
            return member;
        }
    private:
        int member;
};

*t=a這行代碼至關於調用構造函數Test(const Test *t),因此這段代碼能夠編譯經過。 可是運行的話會產生未定義的行爲(undefined behavior)。get

看來這種狀況只能靠經驗了。io

千萬不要解引用空指針,千萬不要解引用空指針,千萬不要解引用空指針。編譯

相關文章
相關標籤/搜索