C++メモリリーク検出


p=new int; //p    ,               ,                   :
1.        #define _CRTDBG_MAP_ALLOC //         ,       ,                    #include <stdlib.h>
#include <crtdbg.h>
(1)#include            。       ,              
(2)   cpp         ,        ,                ,    cpp       
2.   :  _CrtDumpMemoryLeaks()
int main(int argc , char* argv[]){
{new int;}
_CrtDumpMemoryLeaks();return 0;
}
output:Detected memory leaks!
Dumping objects ->{49} normal block at 0x00384DA8, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
     :      (     )、   (  、     CRT)、            、          、          、  16      (    )
  :(1)      ,    {new int;},       main        , _CrtDumpMemoryLeaks()  main      ,        
class A{
public:
int* Data;A(){Data=new int;}
~A(){delete Data;}};
int main(int argc , char* argv[]){
A Test;
_CrtDumpMemoryLeaks();
return 0;}
output:Detected memory leaks!
Dumping objects ->{49} normal block at 0x00384DA8, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
(2)        ,           ,          ,                    A Test;
int main(int argc , char* argv[]){
_CrtDumpMemoryLeaks();
return 0;}
output:Dumping objects ->{49} normal block at 0x00384DA8, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
2.   :          ,     ,         ,    DEBUG OUTPUT   DebugView         
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag( tmpFlag );
3.   :  _CrtMemCheckpoint(),               
int main(int argc , char* argv[]){
CrtMemState s1, s2, s3;
_CrtMemCheckpoint( &s1 );
new int; //    
_CrtMemCheckpoint( &s2 );
if ( _CrtMemDifference( &s3, &s1, &s2) )
 _CrtMemDumpStatistics( &s3 );
return 0;}
output: bytes in 0 Free Blocks.
4 bytes in 1 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.