簡體   English   中英

為什么這個非常簡單的小 C++ 程序以 -1073741819 (0xC0000005) 終止?

[英]Why does this very simple and little C++ program terminates with -1073741819 (0xC0000005)?

我有一個帶有析構函數的簡單類。 如果我使用默認構造函數從它實例化一個對象,那么程序會成功終止,但是如果我使用具有任何參數的構造函數實例化它,它會失敗終止。

#include <iostream>
#include <list>

class MyClass {
public:
    std::list<int>* myList;
    MyClass();
    MyClass(int a);
    ~MyClass();
};

MyClass::MyClass() {}
MyClass::MyClass(int a) {}
MyClass::~MyClass() { delete myList; }

int main()
{

    // If I do only this, the program terminates succesfully with 0 as return value
    MyClass graph1();

    // But if I do this, the program terminates unsuccesfully
    MyClass graph2(3);

    return 0;
}

MyClass graph1(); 不創建MyClass的實例,無論是使用默認構造函數還是其他方式初始化。 相反,它是一個不帶參數並返回MyClass的函數的聲明。 另見:最煩人的解析

MyClass graph2(3); 確實創建了MyClass一個實例。 它的構造函數使myList指針未初始化,然后它的析構函數通過訪問未初始化的指針表現出未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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