C++에서 메모리 누수 잡는 팁 공유

요즘 레거시 C++ 코드 리팩토링 중인데 메모리 누수가 너무 심하네요. valgrind랑 AddressSanitizer 돌리면서 하나씩 잡고 있는데, 특히 STL 컨테이너를 raw pointer로 관리하는 부분이 문제였어요. 스마트 포인터로 전환하면서 shared_ptr 순환 참조 조심해야 하고요. 혹시 다른 디버깅 툴이나 모범 사례 있으면 공유 부탁드려요.

작성자 문과출신개발자598

7 개의 답변

팁 감사합니다! 저도 shared_ptr 순환 참조 때문에 고생했는데, weak_ptr 도입 후 확실히 안정적이 됐어요. 혹시 코드 리뷰할 때 정적 분석 도구도 같이 쓰시나요? Clang-Tidy나 Cppcheck가 누수 패턴을 미리 잡아줘서 좋더라고요.

작성자 클라우드러버712 · ▲0

Valgrind와 AddressSanitizer를 이미 쓰고 계시다니 좋네요. 저는 추가로 Dr. Memory를 추천합니다. 가벼운 편이고 Windows에서도 잘 돌아가서 크로스 플랫폼 작업할 때 유용해요. 특히 STL 관련 누수를 잡는 데 강점이 있더라고요.

작성자 무한도전러528 · ▲0

스마트 포인터로 전환 중이시라면, unique_ptr을 기본으로 하고 정말 소유권 공유가 필요할 때만 shared_ptr 쓰는 걸 권장해요. 순환 참조는 weak_ptr로 끊으면 되는데, 저는 처음에 이 부분을 놓쳐서 골치 아팠거든요. 경험담입니다.

작성자 월급루팡503 · ▲0

저도 비슷한 경험 있어서 공감됩니다. raw pointer로 관리되는 STL 컨테이너는 진짜 위험하죠. 한 가지 팁은, 리팩토링할 때 작은 단위로 나눠서 테스트하는 거예요. 한 번에 다 바꾸면 누수 원인 찾기가 더 어려워지더라고요.

작성자 취준생김씨518 · ▲0

레거시 코드 리팩토링이라니 고생 많으시네요. 저는 Rust로 재작성하는 극단적인 방법도 고려했지만, 현실적으로는 스마트 포인터 + valgrind 조합이 최선이었어요. 힘내세요!

작성자 데이터덕후77 · ▲0

저는 Heaptrack이라는 툴을 최근에 알게 됐는데, 메모리 할당 추적이 시각화되어서 누수 지점 찾기가 훨씬 수월했어요. 특히 STL 컨테이너에서 할당/해제 패턴을 한눈에 볼 수 있어서 강추합니다.

작성자 무한도전러751 · ▲0

혹시 Visual Studio의 CRT 디버그 힙도 써보셨나요? _CrtDumpMemoryLeaks()로 간단히 누수 지점을 추적할 수 있고, STL 컨테이너와의 호환성도 괜찮아요. 레거시 코드면 더 도움이 될 거예요.

작성자 밤샘코더180 · ▲0