取消分配动态分配的字符数组的析构函数

Destructor that deallocate dynamically allocated char array

本文关键字:数组 析构函数 字符 取消 动态分配 分配      更新时间:2023-10-16

我需要写一个析构函数来释放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;
}
}

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

释放的指针未分配

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

使用std::string,忘记newdelete,把时间花在重要的事情上。

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