Cherry Cloud 9

[MFC] Thread 사용 중 원인을 알 수 없는 memory leak 발생 시 CString을 확인해보자. 본문

Programming/API,MFC

[MFC] Thread 사용 중 원인을 알 수 없는 memory leak 발생 시 CString을 확인해보자.

체리구름 2021. 1. 15. 17:03
728x90
반응형

 

개발 중에 짜증나는 점을 하나 꼽는다면 프로그램 디버깅 후 발생하는 memory leak이다. 

제때 메모리를 해제해 주려고 노력하지만 가끔가다 한번씩 해제를 까먹을 때도 있고 등등 다양한 이유로 한번씩 발생하곤 하는데 이번 memory leak은 코드를 한줄 한줄 체크할 만큼 그 원인을 찾기가 매우 어려웠다. 

 

원인은 Thread 내부에서 사용된 CString 이었다. 

Thread 사용 중 TerminateThread 와 같이 강제 종료 될때,

CString 에서 사용하는 메모리 영역이 제대로 해제 되지 않아 발생할 수 있다. 

(그런데 평소 다른 thread 에서는 잘 만 되다가 해당 부분에서 memory leak 이 생겼는지는 더 확인을 해봐야 할 것 같다)

 

결론은 thread가 종료 되기 전 CString 객체에서 Empty() 를 호출하여 문자열을 비워주면 나를 괴롭혔던 memory leak이 사라지는 것을 확인할 수 있다. 

 

Thread 사용 중 원인을 알 수 없는 memory leak 발생 시 CString을 확인해보자.

 

 

728x90
반응형