请教一下关于delete[]的问题

Poopaye 2012-03-19 08:55:30
main ()
{
int *a = new int[100];
int *b = a;
a += 50;
delete[] a;
}

上面这样的情况,这100个int都释放掉了么?
如果答案是是,能否再说明下C++是如何判断出这块内存的实际位置的。
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 buer3587 的回复:]

这样不能全部释放 a的地址发生了变化 前面50个没释放掉把 个人意见
[/Quote]
前面、后面的都没有释放。传统内存管理是使用MBC链的方式,关键数据被放在返回地址之前几个字节,地址发生变化后会造成整个MBC链被破坏;在保护模式下(286/386)下可能会产生异常;
不二Se 2012-03-20
  • 打赏
  • 举报
回复
回去试了 这样运行的话 有个Debug Assertion Failed框弹出来的 不能这样释放的吧 我前面的回复好像是错的
Poopaye 2012-03-19
  • 打赏
  • 举报
回复
谢谢LS各位,我已经明白了
lys86_1205 2012-03-19
  • 打赏
  • 举报
回复
a的地址发生了改变,delete[] a;不会释放
不二Se 2012-03-19
  • 打赏
  • 举报
回复
这样不能全部释放 a的地址发生了变化 前面50个没释放掉把 个人意见
zhao1zhong6 2012-03-19
  • 打赏
  • 举报
回复
这样不能释放
zhao1zhong6 2012-03-19
  • 打赏
  • 举报
回复
a保存了位置

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧