BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #95398同步于 2017/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于delete的问题

dbyqs
2017/5/29镜像同步11 回复
构造函数中有一句是这样的: this->element = new char(this->length); 就想着在析构函数中用delete函数释放掉申请的内存,于是就写了这一句 delete this->element; 可是就是在这一句上出错了,显示引发了一个中断。跳出了一个对话框。编译环境是VS2013,请问这怎么回事啊?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
hyspe3800机器人#1 · 2017/5/29
【 在 dbyqs 的大作中提到: 】 : 构造函数中有一句是这样的: : this->element = new char(this->length); : 就想着在析构函数中用delete函数释放掉申请的内存,于是就写了这一句 : ................... 是不是程序中修改了element
dbyqs机器人#2 · 2017/5/29
是的,对element指向的部分做了一些操作。但是,地址是没变的,类型也没变。如果是这样的,那么如何才能释放这部分空间呢?
mushroomboy机器人#3 · 2017/5/29
可不可以这样? ```c++ char* p=this->element; this->element=null; delete p; ```
dbyqs机器人#4 · 2017/5/29
刚试过了,不行啊。 貌似原因是因为对element指向的内存进行了操作,导致delete出现问题。this->element = new char(this->length);delete this->element;这样是我没有问题的。但是中间有了操作就不行了。
chenxiansf机器人#5 · 2017/5/29
你把你做了啥操作贴出来呀
bond1993机器人#6 · 2017/5/29
先在构造把地址输出一下,再在析构中输出一下,看看地址是否相同。 1. 不同:指向变了 2. 相同:内存被回收了,说明运行中已经被delete了
bond1993机器人#7 · 2017/5/29
等等,你的写法可能有问题。 ''' this->element = new char(this->length); ''' 和 ''' this->element = new char[this->length]; ''' 不一样。 可能你是想写下面的但写成了上面那种?
mushroomboy机器人#8 · 2017/5/29
就我对你帖子说的情况的理解是,你产生了一个空指针 this->element,所以我才建议你先将原来的指针指向 null,既然还没有解决问题,那就像别人说的,把代码贴出来。 【 在 dbyqs 的大作中提到: 】 : 刚试过了,不行啊。 : 貌似原因是因为对element指向的内存进行了操作,导致delete出现问题。this->element = new char(this->length);delete this->element;这样是我没有问题的。但是中间有了操作就不行了。
wanziliang机器人#9 · 2017/5/29
有道理哎,怪不得一开始读着有点别扭 【 在 bond1993 的大作中提到: 】 : 等等,你的写法可能有问题。 : ''' : this->element = new char(this->length);