위조 메모리 유출 문제

나는 dll에서 정적 전역 대상을 사용했다.전역 객체는 STL 컨테이너를 포함하고 dll은 Add 함수를 제공합니다.사용자 측에서 Add를 사용하여 STL 컨테이너에 요소를 추가합니다.프로그램이 끝날 때 전역 대상을 분석합니다.VS output 창에는 메모리 유출이 표시됩니다.STL 용기라니 메모리가 유출된 것으로 분석됐다.말도 안돼.원래 내 MFC 프로그램에서AFX_DEBUG_STATE_AFX_DEBUG_STATE 분석 함수에서 호출됨CrtDumpMemoryLeaks();.그리고AFX_DEBUG_STATE_AFX_DEBUG_STATE 분석 함수는 내가 정의한 전역 함수 앞에서 분석하고, 호출CrtDump Memory Leaks () 는 당연히 전역 대상에 저장된 무더기 대상에 메모리가 유출되었다고 여긴다.안전한 방법은 다음과 같은 예에서 flag을 설정하는 것이다.프로그램이 종료될 때(프로세스가 끝날 때) 자동으로 호출됩니다.CrtDumpMemoryLeaks().프로그램은 모든 전역 대상을 분석한 후에 호출할 것을 보장합니다CrtDumpMemoryLeaks();
#include <iostream>
#include <crtdbg.h>


using namespace std;


void main()
{
	int * p = new int[3];
	cout << "Test Memory Leak" << endl;
}
#include <iostream>
#include <crtdbg.h>


using namespace std;


void main()
{
	//_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
	//<      >
	//_CrtSetDbgFlag                     
	//_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);
	//_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
	//</      >
	int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); //        
	flag |= _CRTDBG_LEAK_CHECK_DF;
	_CrtSetDbgFlag(flag);
	int * p = new int[3];
	cout << "Test Memory Leak" << endl;
}

참고:CRTDBG_LEAK_CHECK_DF가 이flag을 설정한 후 프로그램이 종료될 때, 프로그램은 자동으로 메모리 유출을 감지하고, 호출합니다CrtDumpMemoryLeaks 함수.
_CRTDBG_REPORT_FLAG에서 이 flag을 설정하면 프로그램이 종료될 때 CrtDumpMemoryLeaks를 호출합니다. 기본 dump에서 vs까지의 debug 출력 창입니다.
참고 자료
http://msdn.microsoft.com/en-us/library/5at7yxcs(v=vs.80).aspx

좋은 웹페이지 즐겨찾기