C++ 插入地图时出现分段错误
我想在地图中添加一个新条目,但收到一条分段错误消息C++ 插入地图时出现分段错误,c++,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; } A类{ };
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;
}
A类{
};
B类{
公众:
std::map m;
};
int main(){
A*A=(A*)malloc(sizeof(A));
B*B=(B*)malloc(sizeof(B));
b->m[0]。推回(a);
返回0;
}
当我在做B->M[0 ]时,我得到了这个错误。PuxFuffBead(a).< /P> < P>在C++中永远不要使用<代码> MalOC ,总是使用<代码>新< /COD> < < /P> 因为您使用的是
malloc
,所以构造函数永远不会被调用,因此m
处于未定义状态。访问时表现出未定义的行为
此外,m
正在存储指向A
的指针,这意味着使用[]
访问时默认构造的元素是nullptr
,甚至更多
“实际上,从来没有使用RAW <代码>新< /代码>,只使用基于范围的自动生存期或
,所以构造函数永远不会被调用,因此malloc
处于未定义状态。访问时表现出未定义的行为m
m
正在存储指向A
的指针,这意味着使用[]
访问时默认构造的元素是nullptr
,甚至更多
也就是说,实际上永远不要使用原始
new
,而只使用基于范围的自动生存期或std::unique\u ptrnew
,而不是malloc
。这不是C。b->m[0]
试图使用未初始化的值,导致未定义的行为。请注意,A
对象或B
对象都没有初始化,您只为它们分配了内存块(包含一些垃圾)。new
,而不是malloc
。这不是C。b->m[0]
试图使用未初始化的值,导致未定义的行为。请注意,A
对象或B
对象都没有初始化,您只为它们分配了内存块(包含一些垃圾)。实际上,您更喜欢值语义std::map
@juanchopanzaB
不是空的,并且它的构造函数从未被调用,因此std::map
的构造函数从未被调用。或者,std::shared\u ptr
-取决于实际使用的首选值语义std::map
@juanchopanzaB
不是空的,并且它的构造函数从未被调用,因此std::map
的构造函数从未被调用。或者可能std::shared\u ptr
-取决于使用情况