c++ - 释放动态分配的 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;
}
}
编辑:我添加了构造函数和显示我的位置如何分配的函数。
解决方案
被释放的指针未被分配
在您显示的代码中,您确实没有分配任何东西。location
只是一个指针,没有什么可以删除的。您只能调用delete
指向通过 .cllocated 分配的实例的指针new
。
使用 astd::string
代替,忘记new
并将delete
时间花在重要的事情上。
...
同时,该问题已被编辑。发布的代码仍然缺少重现错误所需的部分,并且由于我不确定究竟遗漏了什么,唯一要添加的是您很可能违反了0/3/5 的规则。上面提到的错误原因仍然相同:您正在尝试delete
什么都没有的东西(或已经被删除的东西)。我的建议还是一样:使用std::string
.
推荐阅读
- python - 有没有办法在python中计算累积和,同时确保相同的值具有相同的最大和值
- c++ - ifstream 在 x64 位平台上崩溃
- css - 为什么在尝试在开始时对齐 flex 项目时应用 flex-direction 列和 justify-content center 这不起作用?
- bcrypt - 从 Spring Security 5.x Bcrypt 哈希迁移到 Quarkus
- html - 使用 Bootstrap 更改平板设备上的布局顺序
- c++ - C ++ linux蓝牙sdp_connect仅以root权限成功
- javascript - 缺少 Javascript 休息参数
- java - 我是否做到不接受输入的@gmail、@hotmail、@yahoo 电子邮件?
- c++ - 使用 g++ 编译 Objective-C 项目时出现运行时错误
- python - 为多个特征运行 pdp.pdp_plot 并将输出轴放入新图形