-
C++ 프로그램에서 memory leak 발생한 사건 | 소멸자 사용하기Programming/Debug 2023. 7. 14. 19:07
내가 짠 프로그램에서 memory leak으로 인해 critical issue가 발생하였다.
그동안 알고리즘에만 집중하느라 흐린눈 하고 있던 부분인데 이번 기회로 메모리 체크를 하게 되었다.
memory leak의 원인
비디오 input을 읽어와서 영상처리를 수행하고 그 결과를 output으로 저장하는 프로그램이다.
이 프로그램이 정상적으로 file make를 끝내면 메모리 누수가 일어나지 않았다.
문제는 중간에 에러가 리턴되는 경우였다.
YOLO detector에서 사람이 없는 경우는 에러 리턴으로 중간에 함수를 탈출하도록 했는데,
이때 Frame transfer관련된 객체가 close되는 코드를 타지 않고 중간에 함수를 탈출한다.
메모리 해제가 되지 않은 채로 프로세스가 반복되면서 0.2~0.3GB씩 쌓이게 된 것이다.
내가 사용중인 GPU 메모리는 용량이 커서 문제가 없었으나...
테스트용 PC에서 강제종료되는 문제가 발견되었다.
해결 방법
- 스마트 포인터를 사용한다.
- class 의 소멸자에서 메모리 할당을 해제한다.
C++ 소멸자는 클래스의 객체가 소멸될 때 호출되는 함수이다.
~MyClass() { // 파일을 닫습니다. file.close(); }
CRT 라이브러리로 메모리 누수 탐지하는 방법
Debug 모드에서만 가능하다.
[C++] 메모리 누수 (memory leak)와 CRT 라이브러리 (tistory.com)
'Programming > Debug' 카테고리의 다른 글
[디버깅]Jupyter notebook 실행 했는데 no module 에러 뜨는 상황 해결 (0) 2023.11.07 yolo_v2_class.hpp 가 Debug mode에서 bad_alloc 예외 발생하는 문제 해결 (0) 2023.07.17 [Visual Studio] yolo_v2_class 에러 해결 (LNK1120, LNK2001) (0) 2023.06.02 Unit test 시 고려해야 할 사항 (2) 2023.03.13 Debug : API default값 (0) 2023.03.07