问一个简单的关于内存问题,困扰我很久了
如果动态生成一段内存
char* pTest = new char[2000];
...
重新指向地址
pTest = &pTest[1000];
那么之前的1000内存,系统会自动回收吗?
如果
delete pTest;
会不会有1000内存泄露?
问题点数:40、回复次数:8Top
1 楼sgnaw(李逍遥)回复于 2006-12-01 17:48:44 得分 5
有内存泄露啊 .Top
2 楼alfwolf(木马煞)回复于 2006-12-01 17:49:48 得分 10
当然是会有泄露的,不过,楼主,你的代码写得不对.
有两个错误,首先你通过被修改的指针来释放内存会导致非法的内存访问.所以你也不必担心内存泄露你不知道.
其次你的删除的方式也不对,delete [] pTest;Top
3 楼qianld(会淹死的鱼)回复于 2006-12-01 17:51:01 得分 0
应该不会!
char* pTest = new char[2000];
可以假设自动分配了地址0-1999
而你pTest = &pTest[1000];指令只是将pTest[1000]的地址放在了地址0的位置,即地址0的数据是999;
delete pTest;后又将0-1999地址释放了!
所以不会泄露!
只是理论上推算!
具体还要实践!Top
4 楼bobob(静思)回复于 2006-12-01 17:56:12 得分 5
会有泄露
释放方式不对Top
5 楼pig_2000()回复于 2006-12-01 17:59:46 得分 0
其实是这样的,我要对一快很大的内存数据进行处理,需要清除前面一些数据
正常情况是申请一块tmp内存,进行数据拷贝,然后删除原先的内存,最后把tmp的地址赋予原先的指针。
可是这样就多一步数据copy的过程,我想知道有没有好的办法来避免这一步额外的计算。
Top
6 楼pig_2000()回复于 2006-12-01 18:12:52 得分 0
这样可不可以
char* pTest = new char[2000];
char* tmp = pTest;
pTest = &pTest[1000];
.....
....
....
pTest = tmp
delete []pTest;
Top
7 楼liuqiyc(cyiquil)回复于 2006-12-01 19:24:06 得分 10
楼上可行
下面这样也行
char* tmp = new char[2000];
char* pTest = tmp;
pTest = &tmp[1000];
.....
....
....
delete []tmp;Top
8 楼Stefine(CSDN最菜滴猩猩)回复于 2006-12-01 20:38:58 得分 10
char* tmp = new char[2000];
char* pTest = tmp;
pTest = &tmp[1000];
.....
....
....
delete []tmp;
tmp = NULL;
pTest = NULL;
总感觉浪费了 1000
PS: 切忌delete[] temp后再使用pTest(尽管大家都晓得,也注明下)Top





