插入地图时出现分段错误

时间:2018-01-11 20:12:32

标签: c++

我想在地图中添加新条目,但我收到了分段错误消息。

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-&gt; m [0] .push_back(a)时收到错误。

1 个答案:

答案 0 :(得分:6)

永远不要在C ++中使用malloc,始终使用new

因为您正在使用malloc,所以构造函数永远不会被调用,因此您的m处于未定义状态。访问时显示未定义的行为。

此外,m存储指向A的指针,这意味着使用[]访问时默认构造的元素为nullptr,甚至更多UB。

那就是说,实际上从不使用原始new,只使用基于范围的自动生命周期或std::unique_ptr