如何编写析构函数检查指针是否为空?动态数组释放报错求助
问题分析与修复
核心错误原因
你在构造函数里定义了局部变量mArray,而非给类的成员变量赋值。这导致类的成员mArray始终是未初始化的垃圾值,析构函数尝试释放这个野指针,触发了malloc的错误提示。
修复步骤
- 确保类中声明成员变量:
CheckedArray类必须包含int* mArray;这个成员(当前代码片段未显示,但这是前提)。 - 修正构造函数赋值逻辑:去掉构造函数里
mArray前的int *,直接给成员变量分配内存,避免创建局部变量覆盖成员。 - 优化初始化与空指针判断:用
nullptr替代NULL更符合现代C++规范;可以用new int[size]()直接初始化数组元素为0,省去循环赋值。
修正后的代码
类声明
class CheckedArray { private: int mSize; int* mArray; // 必须声明的成员变量 public: CheckedArray(int size); ~CheckedArray(); };
构造函数与析构函数实现
CheckedArray::CheckedArray(int size) : mSize(size) { // 直接给成员变量mArray分配内存,同时初始化所有元素为0 mArray = new int[size](); } CheckedArray::~CheckedArray() { if (mArray != nullptr) { delete[] mArray; mArray = nullptr; // 释放后置空,避免后续误操作(可选但推荐) } }
补充说明
原来的构造函数中,int *mArray = new int[size];创建的是构造函数局部作用域内的指针,和类的成员变量mArray毫无关系。局部指针在构造函数执行完毕后会被销毁,而类的成员mArray始终是未初始化的随机地址,析构函数释放这个非法地址就会触发“指针未被分配”的错误。
内容的提问来源于stack exchange,提问作者user18102815
相关产品推荐
相关产品推荐

