我正在构建一个结构,其中一个成员是一个地图.
第一个问题是允许的吗?编译器没有抱怨.
struct A {
map<int, float> B;
}
Run Code Online (Sandbox Code Playgroud)
后来我声明了一个这样的数据类型的数组.
A *C = (A *)INTERNAL_CALLOC(..., sizeof(A));
Run Code Online (Sandbox Code Playgroud)
这里的函数INTERNAL_CALLOC是MALLOC的功能包装器.
稍后在代码中,当我尝试第一次将项插入到数组的第一个元素的映射中时,我得到了一个核心转储.
C[0].B[0] = 0.001;
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
谢谢!
是的,结构中的地图很好.
分配malloc绝对不是很好; 不调用构造函数.因此,当您尝试使用它时,您的地图很可能会做一些可怕的事情.
一般经验法则:不要在C++中使用malloc/ calloc/ realloc/ free.尽可能避免动态分配,并在不可避免时使用new/ delete.*