Detected memory leaks!
Dumping objects ->
{10} normal block at 0x037EA8C8, 20 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
이 메세지는 디버그모드로 프로그램이 종료될때 메모리의 누수 나타나는 메세지다.
여기서 {10}은 누수가 나타난 부분메모리 할당된 메모리 영역의 번호를 의미한다.
하지만, 일반적인 프로그래머가 이 메세지를 보고 어디서 난지 확인 하는건 어렵다.
그래서, VS에서는 디버그모드에서 특정 할당메모리에 중단점을 설정하는 함수가 있다.
_CrtSetBreakAlloc(10);
메인프로그램의 시작위치에 함수를 넣고 위 메세지에 나타난 메모리 번호를 넣어주면된다.
그러면 디버그로 실행했을때 해당 메모리가 할당된후 중단이 되는데,
여기서 스택을 따라 이동해서 확인해보면 동적으로 할당해 문제가 발생된 메모리를 알수있다.
*메모리의 누수: 메모리가 동적으로 할당된경우 메모리가 자동으로 해제되지않는데,
이때 프로그래머가 임의적으로 메모리를 해제하지않아서 프로그램이 종료된뒤에도
해당 메모리가 남아있는 현상을 말한다.
*추가 예제:
#include <crtdbg.h> //필요해더파일
#include <stdio.h>
void main()
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //디버그에 메모리립이 생기면 프로그램이 종료되고 알려줄때 사용됨.
_CrtSetBreakAlloc(10); //10번 메모리가 할당될때 중단점을 설정함.
char *pChar;
pChar = new char(); //여기서 할당된 메모리번호를 10이고 가정할때 이 메모리가 할당되면 중단점이 설정됨.
//delete char; //동적할당된 메모리 삭제(주석처리되있음으로 메모리누수가 발생한다.)
}
댓글
댓글 쓰기