메모리 누수를 검사하는 방법에 대한 포스팅
프로그래밍을 하다보면 메모리를 할당하고 해제하는 것을 잊어 버리는 경우가 생기기 마련이다.
1 2 3 4 5 6 7 8 | #include <iostream> int main() { int * pA = new int(10); // 메모리 할당 std::cout << *pA << std::endl; // 사용 //delete pA; // 메모리 해제 } | cs |
위의 코드는 메모리릭이 나고 있다. 작은 프로그램의 경우 찾기 쉽겠지만 조금이라도 규모가 있다면 찾기 매우 어렵다.
이때 해결하는 여러방법이 있겠지만 그 중 어떤 메모리가 어디서누수 되었는지 알 수 있는 방법이 있다.
코드는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> #include <crtdbg.h> int main() { _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); //_CrtSetBreakAlloc(151); //여기에 넘버를 넣는다. int * pA = new int(10); std::cout << *pA << std::endl; //delete pA; _CrtDumpMemoryLeaks(); } | cs |
위의 코드를 실행시키면 출력창에 아래와 같이 출력된다.
1 2 3 4 5 | Detected memory leaks! Dumping objects -> {151} normal block at 0x005BCB78, 4 bytes long. Data: < > 0A 00 00 00 Object dump complete. | cs |
이때 151이라는 숫자를 _CrtSetBreakAlloc(151) 함수안에 대입하고 다시 실행하면 아래와 같이 실행 중에 해당 메모리가 할당되는 위치에 브레이크가 걸린다.
이로써 메모리 누수를 검사하는 방법을 알아보았다.
+ _CrtDumpMemoryLeaks(); 은 반드시 프로그램의 마지막 위치에서 호출해야한다.
'All > C++' 카테고리의 다른 글
자주 사용하는 STL function (0) | 2016.11.28 |
---|---|
operator new / operator delete (0) | 2016.03.14 |
가변인자 로그 출력함수 (0) | 2015.12.29 |
RValue와 LValue (2) | 2015.12.28 |
문장줄이기 (0) | 2015.12.28 |