[출력 로그]
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {26109} client block at 0x04AD0518, subtype c0, 68 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {26064} client block at 0x04AB68E0, subtype c0, 68 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {565} normal block at 0x04A7DDB8, 20 bytes long.
위의 붉게 표시한 숫자는 Memory Allocation Number 라 불린다. 간단하게 프로그램 내의 메모리 할당 주소다.
우리는 이 메모리 번지수를 할당하는 소스라인으로 가기만 한다면, Game Over 다.
메모리 번지수를 Break해주는 함수는 아래와 같다.
- #include <crtdbg.h>
long _CrtSetBreakAlloc(long _BreakAlloc)
- void AfxSetAllocStop(LONG lRequestNumber)
위 두 함수를 사용하면 된다.
_CrtSetBreakAlloc 같은 경우는 dll이나 다른 용도로도 사용하고자 할때 쓰이고.. (자세히 몰름)
AfxSetAllocStop 같은 경우는 MFC에서 include 없이 사용하면 된다.
각 인자값에 메모리 번지수를 넣어주면, 그 메모리 번지수에 최초로 메모리를 할당하는 부분에서 Break Point가 걸린다. 직접 해보는게 빠른길 ^_^
하지만 결론적으로 저 두 함수만으로 모든 메모리 릭 나는 부분을 찾는건 불가능하다..
VST 출력 로고에 매번 Memory Allocation Number 가 달라 지는 경우도 있기 때문이다 (!)MFC Socket 같은 경우가 그러했다. (접속 스레드나, 뭐 이런저런 상황에..? 하튼 MFC Socket 저주스럽다..)
여튼...상황에 따라 매우 매우 very very 유용한 함수 이니... 알아두면 좋다 !
'프로그래밍 > MFC' 카테고리의 다른 글
오류 해결 - 미리 컴파일된 헤더 (0) | 2020.11.13 |
---|---|
오류 해결 - 메모리 leck (0) | 2020.11.13 |
오류 해결 - Buffer too small (0) | 2020.11.13 |
오류 해결 - afxtoolbarimages (0) | 2020.11.13 |
오류 해결 - _CrtDbgReport: String too long or IO Error (0) | 2020.11.13 |