读书人

为什么这样没有内存泄露解决方法

发布时间: 2012-02-24 16:30:38 作者: rapoo

为什么这样没有内存泄露
学c++的都知道,用new创建一个数组的时候,记得用delete[]来删除,否则的话会造成内存泄露。
今天做了一个测试发现的结果确不是这样的,我用的开发工具是VS2005
int *p = new int[10];
int *head = p; //record the address of this array
for (int i = 0; i <5; i++)
{
*p = i;
p++;
}

delete head; //replace delete[] head;
我用vs自带的工具memory观察了内存分配过程,以及释放过程,发现居然不是我想象的只释放第一个数据对象*head,而是整个数组空间都被释放了。

为了确认,我还用DoundsChecker 检查了一遍,没内存泄露。

请问这是什么原因?还是microsoft在vs2005做的优化处理?

[解决办法]
int *p = new int[10];
换成string * p = new string[10];
再试试
[解决办法]
delete head; //replace delete[] head;
这个没带[] 有可能导致泄露
有些时候你申请他还是可以释放干净的

[解决办法]
为什么该有内存泄漏?你内存不是已经释放了么?delete[]和delete对简单类型是一样得

读书人网 >C++

热点推荐