为对象数组分配内存时程序崩溃
Program crashes when allocating memory for object array
我的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[]
删除它!
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃