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.