为了账号安全,请及时绑定邮箱和手机立即绑定

c++释放内存

为什么p指针释放的时候要自加?(p指的是数组

正在回答

3 回答

首先,p指针释放并不需要自加,因为delete[]这个就表示要释放一段连续的内存,如果还要挨个释放,

那么跟直接delete有什么区别;

其次我再解释一下为什么p要++之后再释放,请注意上面那个使用到p的循环,每次循环都自减;

p先是指向第三个元素,然后

第一次循环,将第三个元素打印,然后p自减,变为指向第二个元素;

第二次循环,将第二个元素打印,然后p自减,变为指向第一个元素;

第三次循环,将第一个元素打印,然后p自减,变为指向第一个元素地址的再上一个;

这时,p的地址并不是我们先前申请的那块连续地址的首地址,而我们delete[]必需要首地址,

此时p自加(注意一个细节,只自加了一次,而并非是循环自加),重新指向那块连续地址的首地址,

这时便可以对p进行合法的释放。

如果还有我没解释清楚的地方或者还有想要了解的地方,欢迎提问!!!

1 回复 有任何疑惑可以回复我~
#1

慕神6325190

delete []p 必须是首地址吗 p指向第二个元素释放会怎么样
2017-07-01 回复 有任何疑惑可以回复我~

p既然为数组,就有多个实例化的对象,p可以看做是数组第一个对象的指针,每个对象都要释放内存,也都要执行析构函数,通过p++,就不断移动指针,不断释放内存

0 回复 有任何疑惑可以回复我~

因为 要对每个对象进行析构,指针当然要移动 了

0 回复 有任何疑惑可以回复我~
#1

qq_啊你竟然丶_0

你错了,视频中之所以要在delete之前将p++,是因为p的指向出了范围,具体原因我在下面再解答
2017-04-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

c++释放内存

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信