【发布时间】:2023-02-02 15:06:16
【问题描述】:
CheckedArray::CheckedArray(int size) :mSize(size){
int *mArray = new int[size];
for(int i = 0; i < size; i++)
mArray[i] = 0;
}
CheckedArray::~CheckedArray() {
if (mArray == NULL){
return;
}
else {
delete[] mArray;
}
}
我正在使用动态内存分配来创建一个新数组。我想检查指针是否为空,然后返回。如果没有,则删除。我收到这些错误消息,但我不知道出了什么问题。
(9094,0x100094600) malloc: *** 对象 0x10001e7b3 错误:未分配正在释放的指针
(9094,0x100094600) malloc: *** 在 malloc_error_break 中设置断点进行调试
【问题讨论】:
-
为什么不使用 std::unique_ptr<int[]>? avoid calling new/delete explicitly 并使其成为成员变量
-
int *mArray = new int[size];创建一个局部变量和内存泄漏,因为一旦函数结束,指针就会丢失。如果您有一个名为mArray的成员变量,那么您将改用mArray = new int[size];。在删除指针之前无需检查指针是否为NULL。删除NULL指针很好,只是一个 nop。 -
其他注意事项,不要使用NULL,而是在C++中使用
nullptr。并且在你所有的构造函数中初始化一个指向 nullptr 的成员变量指针,除非你真的分配内存。 -
您使用成员初始值设定项列表来初始化大小,为什么不对数组也这样做呢?
标签: c++ pointers constructor dynamic-memory-allocation destructor