网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [求助] 内存泄露----关于内置对象和类对象的delete与delete【】问题
OKBEN
TW金牌会员
Rank: 6Rank: 6



UID 138713
精华 37
积分 1469
帖子 584
阅读权限 70
注册 2008-7-29
状态 离线
发表于 2008-8-28 10:24 资料 短消息 加为好友 添加 OKBEN 为MSN好友 通过MSN和 OKBEN 交谈
内存泄露----关于内置对象和类对象的delete与delete【】问题

#include <string> .x7a4b h*Y$Q
using namespace std;
:L0b+E&r.}!t"@+yTechWeb-技术社区
2u(G/[1R7y4@:kint main() '_:D6J/e1z1D2R2J
{ #|,_+X,Z K2z1_
    int *i_p = new int[5];
8m*U)|(u+utech.techweb.com.cn    delete i_p;            //1 "w6m4y4z%d%p5n
// delete []i_p;          //2
'`#D:Y4T&O;M
2b(f&W8]'w2G9r0h    string *s_p = new string[5];
-j$k3D)K-Z#t-S4v0f:p程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛// delete s_p;            //3 tech.techweb.com.cn+o(k*y'b3i$F4o+F
    delete []s_p;          //4
2b$q9J0A$F#K1r!{*H&y7v;W2B
return 0; d `;V7V!W+^
}
$u4d+r2A&O/**症状:*/ 'Q1a8Z"L!e%^ K;v;m
上述代码,在vc6环境,debug运行下,第1与2行的效果是一样的,通过检测,均没有造成内存泄露;而第3与4行的效果则大相径庭。采用第3行,编译连接通过,但执行出错。第4行为正解。
9I%L.v3|*[!A!F%w ~0~
(u$D2S8`%gtech.techweb.com.cn/**试问:*/
"L+V!e)l-k8v.W对于内建类型,用delete【】和delete效果相同,系统会自动删除所有;而对于类类型,二者不同可能引起内存泄露。请问编译器在 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛8U0[,A%[,M ^
此问题上如何处理的,它做了些什么?
/G+E2_1`*v9w-i1_;{程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛%|;S7a2T0\/A#[(|1S z
/**附注:*/
(L!D#m/_5h+~'z([程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛上述所谓检测手段,分别采用了5种方法来检测,症状均类似。其中包括MSDN中提到的“#ifdef _DEBUG TechWeb-技术社区.[!E(r!D2`;G(U;q
CMemoryState oldMem, newMem, diffMem;  )I9f(w'L$?7c!K0n.s*t
        oldMem.Checkpoint();   
6g6K9R'^*L(c0etech.techweb.com.cn        ...... tech.techweb.com.cn/B+g3[8g/z9v
        newMem.Checkpoint();
$]!g3w6^3B&c!\        diffMem.Difference( oldMem, newMem )
5U.|&}9I(z&Q        ......”

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:24
delete加括号的目的也就是调用数组中每个元素的析构函数. 7b)x7S&\)^
如果不加[]就认为是1个

引用 回复 顶部
OKBEN
TW金牌会员
Rank: 6Rank: 6



UID 138713
精华 37
积分 1469
帖子 584
阅读权限 70
注册 2008-7-29
状态 离线
发表于 2008-8-28 10:24 资料 短消息 加为好友 添加 OKBEN 为MSN好友 通过MSN和 OKBEN 交谈
进来等高手讲解进来等高手讲解

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:25
我没看错吧? "?$N)r;U+].m9h*T4R"Z

1C7p"X+i+i"Q(\tech.techweb.com.cn是在玩语法吗?

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:25
对于内建类型,用delete【】和delete效果相同,系统会自动删除所有 8o(h'\.o9{-Q"~
2E1A;K)a+E k+}-`
不是这样吧?

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:25
你可以用for(int i=0;i <1000;i++){ TechWeb-技术社区'M"[ p2r/@'R$`
char* p = new char[1024*1024*4];
,O/F;O/d1W)qtech.techweb.com.cndelete p; 7G't:p:x:a3\'w;}
} -P0j!C8y#X3f/s#J)J"w0j

.`6K3P!H0q-?测试循环1000此后你的程序占用内存

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:25
delete []和delete应该是不一样的吧? .L:W2f!Y4@'v"]6?
不出错有点怪了

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:25
采用第3行,编译连接通过,但执行出错
6t)|1c9s8g-S==========================
-Z:m!@ Y!e
0m(g9i*{&r,J8a程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛不应该会程序崩溃吧? $`.?/G's0J:c8O!v u%z
还是只是有内存泄露?

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:26
采用第3行,编译连接通过,但执行出错 9u*P/C;o+b9Q)@#g
==========================
q1f7f2n'h+z/w0n0m7d)a-V4R)y)o2Q
不应该会程序崩溃吧? (P6q%I.\$M%H1\1A:N
还是只是有内存泄露?

引用 回复 顶部
游客
该用户匿名发帖









发表于 2008-8-28 10:26
试了,是debug版的ASSERT

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-11-23 08:41
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.053990 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP