在为对象数组分配内存时程序崩溃

时间:2014-06-14 09:12:12

标签: c++

我的代码在C ++中是这样的

MyObject* someObject;

void makeArray(int sizeArray)
{
    someObject = (MyObject*) malloc(sizeof(MyObject) * sizeArray);
}

现在这个编译没有任何错误或警告,但是当我运行程序时它会立即崩溃。我也试过硬编码数组,我确实有足够的内存。我没有太多使用malloc,所以我可能有一些错误的编码,但如果这是问题,它是什么?

2 个答案:

答案 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 ++中使用mallocnew是您应该使用的

即。

someObject = new MyObject[sizeArray];

然后使用delete[]删除它!