怎样判断动态分配的内存区域已经完全被释放了?

xombat 2006-05-09 06:39:28
怎样判断自己动态分配的内存区域已经完全被释放了?
比如:
int *p=new int[2];
delete p; //这段程序在vc++7.0中没有出错
怎样判断,这段int[2]内存区域被局部释放了还是被完全释放了?
==========================================================
我这样改了改,大概推断这里的delete p;完全等于delete []p;
int *p=new int[2];
p[0]=20;
p[1]=26;
delete p;
cout << "p[1]=" << p[1] << endl;
这时,p[1]的值不再是26,而是一个垃圾值,我就此推断p[1]的内存空间也被释放了,所以断定
delete pi;==delete []pi;
不知这样推断对不对,还是编译器优化的缘故。
===========================================================
顺便再问一下,就看这段代码,把delete p;改为delete []p;释放内存时,他怎样知道要释放两个int的区域而不是三个,难道这段区域的结尾有表示结束的标识符吗(就像字符串中的'\0')?
...全文
260 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawndu 2006-05-11
  • 打赏
  • 举报
回复
准确的说,对于基本类型,delete和delete []是一样的
铖邑 2006-05-10
  • 打赏
  • 举报
回复
对于int *指针,delete和delete[]的效果是一样。

把内存释放掉之后那个内存应该还是有值的,而且读出也不会有问题。但是一旦又有程序申请内存,这时就不能确定了。
xombat 2006-05-10
  • 打赏
  • 举报
回复
怎样判断自己动态分配的内存区域已经完全被释放了?

加分了!

楼上“内存释放与否,和能否连接使用是两个不同的问题“这句话不是很明白...
寻开心 2006-05-09
  • 打赏
  • 举报
回复
申请出来的内存,系统是有一个管理表在记录分配的空间大小的
不用你来操心如何释放

你不能释放局部,只能全部释放
寻开心 2006-05-09
  • 打赏
  • 举报
回复
楼主你没有搞清楚一个事情

内存释放与否,和能否连接使用是两个不同的问题

释放了,只表示那块内存不被你所占用,别人可以安全的访问它了

64,674

社区成员

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

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