我的代码在C ++中是这样的
MyObject* someObject;
void makeArray(int sizeArray)
{
someObject = (MyObject*) malloc(sizeof(MyObject) * sizeArray);
}
现在这个编译没有任何错误或警告,但是当我运行程序时它会立即崩溃。我也试过硬编码数组,我确实有足够的内存。我没有太多使用malloc,所以我可能有一些错误的编码,但如果这是问题,它是什么?
答案 0 :(得分:3)
在创建具有非平凡构造函数的对象时,不应使用malloc
,主要是因为malloc
将不调用任何构造函数;它只会分配内存,仅此而已。
在 C ++ 中,使用 operator new 分配内存和构造对象:
MyObject* someObject;
void makeArray(int sizeArray) {
someObject = new MyObject[sizeArray];
}
注意:对于每个 new ,您应该有匹配的删除,请记得在您使用delete[] someObject
时完成了。
做事的 C ++方式是使用std::vector
来处理内存管理和对象构建/销毁:
std::vector<MyObject> vec (sizeArray); // create a vector with `sizeArray` elements
如果&#34;必须&#34; 使用指针,请不要使用原始指针,而应该使用智能指针,如果这些是根据您的实施情况提供:
答案 1 :(得分:1)
为什么在C ++中使用malloc
? new
是您应该使用的
即。
someObject = new MyObject[sizeArray];
然后使用delete[]
删除它!