簡體   English   中英

插入地圖時出現細分錯誤

[英]Segmentation fault when inserting in a map

我想在地圖中添加一個新條目,但是我收到一個分段錯誤消息。

class A {

}; 

class B {
public:
    std::map<int, std::vector<A*> > m;
};

int main() {
    A *a = (A*)malloc(sizeof(A));
    B *b = (B*)malloc(sizeof(B));
    b->m[0].push_back(a);
    return 0;
}

我在執行b-> m [0] .push_back(a)時遇到錯誤。

切勿在C ++中使用malloc ,而應始終使用new

因為您正在使用malloc所以構造函數永遠不會被調用,因此您的m處於未定義狀態。 訪問時顯示未定義的行為。

而且, m存儲指向A指針,這意味着使用[]訪問時,默認構造的元素為nullptr ,甚至更多的UB。

也就是說,實際上從不使用raw new而僅使用基於范圍的自動生存期或std::unique_ptr

暫無
暫無

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

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