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

Program crashes when allocating memory for object array

本文关键字:程序 崩溃 内存 分配 对象 数组      更新时间:2023-10-16

我的c++代码是这样的

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

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

内存分配不合理

当你创建有重要构造函数的对象时,你不应该使用malloc,主要是因为malloc调用任何构造函数;它只会分配内存,仅此而已。

c++ 中,使用操作符new分配内存构造对象:

MyObject* someObject;
void makeArray(int sizeArray) {
    someObject = new MyObject[sizeArray];
}

注意:对于每一个new您都应该有一个匹配的delete,当您完成时请记住使用delete[] someObject


推荐解决方案

c++的方法是使用std::vector来处理内存管理,和对象的构造/销毁:

std::vector<MyObject> vec (sizeArray); // create a vector with `sizeArray` elements

如果你必须使用指针,请不要使用原始指针,如果你的实现中有智能指针,你应该使用它们:

  • 什么是智能指针,我什么时候应该使用一个?

为什么在c++中使用malloc ?new是你应该使用的

someObject = new MyObject[sizeArray];

然后用delete[]删除它!