首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组new的释放有关问题

2012-07-28 
数组new的释放问题现有double* anew double[10]anew double[15]delete[] a那么,“new double[10]” 的

数组new的释放问题
现有 double* a=new double[10];
  a=new double[15];
  delete[] a;
那么,“new double[10]” 的空间释放了吗?应该如何释放?

[解决办法]
没有,该段内存丢失了,在程序结束操作系统回收全部内存前,该段内存无法被使用也无法被回收
[解决办法]
任何一段你自己申请的内存,都必须保证有一个指针指着它
如果原本指向它的指针无效了脱离作用域了或者指向其他内存了,那么这段内存就丢失了,只能等待程序退出时操作系统来回收——或者直接断电
如果这样的内存越来越多,那么这个程序基本也就完蛋了
[解决办法]
数组的定义应该使用标准的!!

a申请【10】空间的地址,

a申请【15】空间的地址,这个的首地址是不相同的!!【10】的空间就这样完全被占据了。。
[解决办法]
double* a=new double[10];
delete []a;
a=new double[15];
delete[] a;
应该这样写,记住每一个new都要对应一个delete,每一个open也要对应一个close,不然就可能有内存泄露。其实你这个程序和这个差不多
double* a=new double[10];
double *b=new double[15];
delete[] b;
很明显,a没有释放,况且还没上面这个好。因为你开始向内存申请了10个double长度的空间,然后把头指针给了a,但是你这块内存没释放,又申请了15个double长度的空间,并且把头指针给了a,那么a原来的内容被覆盖了,原来的头指针成了野指针。程序运行着,就相当于你的内存,好比是2g,现在变成2g-(10个double内存空间)的大小了。

热点排行