17
10. 메메메 메메 메메 (L) C++ 프프프프프 메메메

[C++ lab] 10. 메모리 누수 체크

Embed Size (px)

Citation preview

Page 1: [C++ lab] 10. 메모리 누수 체크

10. 메모리 누수 체크(L) C++ 프로그래밍

박민근

Page 2: [C++ lab] 10. 메모리 누수 체크

메모리 누수 체크(Memory Leak Check)

Page 3: [C++ lab] 10. 메모리 누수 체크

메모리 해제 주의 사항

Page 4: [C++ lab] 10. 메모리 누수 체크

메모리 해제 테크닉

Page 5: [C++ lab] 10. 메모리 누수 체크

메모리 해제 주의 사항 (2)

Page 6: [C++ lab] 10. 메모리 누수 체크

댕글링 포인터 Dangling Pointer

Page 7: [C++ lab] 10. 메모리 누수 체크

댕글링 포인터 Dangling Pointer

댕글링 포인터 이미 해제된 메모리를 가르키고 있는유효하지 않은 포인터

Page 8: [C++ lab] 10. 메모리 누수 체크

메모리 누수 Memory Leak

메모리 누수 (Leak)할당된 메모리를가르치고 있는 포인터가 없어져서 해제 할 수가 없다

Page 9: [C++ lab] 10. 메모리 누수 체크

메모리 누수 Memory Leak

체크를 할 수 없다는 것이 더 큰 문제 !!

Page 10: [C++ lab] 10. 메모리 누수 체크

메모리 누수 체크

Page 11: [C++ lab] 10. 메모리 누수 체크

메모리 누수 체크 - 테스트

프로그램 종료 후에 해제 되지 않은 메모리 릭을 체크하여 출력한다 . 릭이 발생한 메모리 크기와 메모리 내용 , 할당한 코드를 보여준다 .메시지를 더블 클릭하면 , 메모리를 할당한 코드로 이동 !

Page 12: [C++ lab] 10. 메모리 누수 체크

메모리 누수 체크• 현업 개발에서는 좀 더 전문적인 도구들을 사용한다 .

• 상용 툴 / 오픈소스 등이 존재 한다 .

• 대표적인 오픈소스 : VLD

Page 13: [C++ lab] 10. 메모리 누수 체크

가상 소멸자를 써야하는 이유

Page 14: [C++ lab] 10. 메모리 누수 체크

가상 소멸자

Page 15: [C++ lab] 10. 메모리 누수 체크

일반 소멸자

메모리 릭이 발생 !!

Page 16: [C++ lab] 10. 메모리 누수 체크

일반 소멸자

메모리 릭이 발생 !!

Page 17: [C++ lab] 10. 메모리 누수 체크

가상 소멸자

원인 다형성으로 인해 , 오버라이딩 된 자식 클래스의

소멸자가 호출 되지 않았기 때문

해결 부모 클래스의 소멸자를 virtual 로 선언 한다 .

가상 생성자는 존재 하지 않는다 !

부모는 자식이 될 수 없다 .