首页 > 解决方案 > 释放动态分配的 char 数组的析构函数

问题描述

我需要编写一个析构函数来释放 char 数组,但我总是收到此错误消息“未分配被释放的指针”。看起来我多次删除了该位置,所以我尝试检查 char 指针是否为 NULL,但它仍然不起作用。请帮忙。注意:house 对象是另一个类的成员数据。

class House {
private:
    char * location;
public:
    House();
    ~House();

House::House() {
    location = NULL
}

int House::create_house(char init_location[100]) {
    location = new char [strlen(init_location) + 1];
    strcpy(location, init_location);
    return 1;
}

House::~House() {
    if (location) {
        delete [] location;
        location = NULL;
    }
}

编辑:我添加了构造函数和显示我的位置如何分配的函数。

标签: c++

解决方案


被释放的指针未被分配

在您显示的代码中,您确实没有分配任何东西。location只是一个指针,没有什么可以删除的。您只能调用delete指向通过 .cllocated 分配的实例的指针new

使用 astd::string代替,忘记new并将delete时间花在重要的事情上。

...

同时,该问题已被编辑。发布的代码仍然缺少重现错误所需的部分,并且由于我不确定究竟遗漏了什么,唯一要添加的是您很可能违反了0/3/5 的规则。上面提到的错误原因仍然相同:您正在尝试delete什么都没有的东西(或已经被删除的东西)。我的建议还是一样:使用std::string.


推荐阅读