Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 插入地图时出现分段错误_C++ - Fatal编程技术网

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 <代码>新< /代码>,只使用基于范围的自动生存期或 STD::UNQuyGYPTR .< /P> < P>在C++中永远不要使用<代码> MalOC/<代码>,总是使用<代码>新< /COD> < < /P> 因为您使用的是

malloc
,所以构造函数永远不会被调用,因此
m
处于未定义状态。访问时表现出未定义的行为

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


也就是说,实际上永远不要使用原始
new
,而只使用基于范围的自动生存期或
std::unique\u ptr

new
,而不是
malloc
。这不是C。
b->m[0]
试图使用未初始化的值,导致未定义的行为。请注意,
A
对象或
B
对象都没有初始化,您只为它们分配了内存块(包含一些垃圾)。
new
,而不是
malloc
。这不是C。
b->m[0]
试图使用未初始化的值,导致未定义的行为。请注意,
A
对象或
B
对象都没有初始化,您只为它们分配了内存块(包含一些垃圾)。实际上,您更喜欢值语义
std::map
@juanchopanza
B
不是空的,并且它的构造函数从未被调用,因此
std::map
的构造函数从未被调用。或者,
std::shared\u ptr
-取决于实际使用的首选值语义
std::map
@juanchopanza
B
不是空的,并且它的构造函数从未被调用,因此
std::map
的构造函数从未被调用。或者可能
std::shared\u ptr
-取决于使用情况