内存泄露----关于内置对象和类对象的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 ......”
|