[VS/디버깅]Detected memory leaks!(메모리의 누수가 감지되었습니다!)

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; //동적할당된 메모리 삭제(주석처리되있음으로 메모리누수가 발생한다.)
}

댓글

이 블로그의 인기 게시물

[gpt/gpt와 대화/번역]이미지생성형ai와 인공지능에 대하여

[C#]CS1612: 'List.this[int]'은(는) 변수가 아니므로 해당 반환 값을 수정할 수 없습니다.

[AI요약/퍼플렉시티]게임산업의 침체와 한국게임업계의 희망