我想在地图中添加一个新条目,但是我收到一个分段错误消息。
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。
也就是说,实际上从不使用原始的new
,而仅使用基于范围的自动生存期或std::unique_ptr
。
关于c++ - 插入 map 时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48215100/