我想在地图中添加新条目,但我收到了分段错误消息。
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)时收到错误。
答案 0 :(得分:6)
永远不要在C ++中使用malloc
,始终使用new
。
因为您正在使用malloc
,所以构造函数永远不会被调用,因此您的m
处于未定义状态。访问时显示未定义的行为。
此外,m
存储指向A
的指针,这意味着使用[]
访问时默认构造的元素为nullptr
,甚至更多UB。
那就是说,实际上从不使用原始new
,只使用基于范围的自动生命周期或std::unique_ptr
。