You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写析构函数检查指针是否为空?动态数组释放报错求助

问题分析与修复

核心错误原因

你在构造函数里定义了局部变量mArray,而非给类的成员变量赋值。这导致类的成员mArray始终是未初始化的垃圾值,析构函数尝试释放这个野指针,触发了malloc的错误提示。

修复步骤

  1. 确保类中声明成员变量:CheckedArray类必须包含int* mArray;这个成员(当前代码片段未显示,但这是前提)。
  2. 修正构造函数赋值逻辑:去掉构造函数里mArray前的int *,直接给成员变量分配内存,避免创建局部变量覆盖成员。
  3. 优化初始化与空指针判断:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:40:50