흔히 발생하는 메모리 문제
스트링 과소 할당, 메모리 경계 침범, 메모리 누수, 댕글링 포인터
7장 - 흔히 발생하는 메모리 문제
1) 스트링 과소 할당 문제
C 스타일 스트링이 들어갈 공간을 할당할 때, 스트링의 끝을 나타내는 \0
이 들어갈 공간을 빼먹을 경우에 발생한다.
해결법
- C++스타일 string 사용
- 버퍼를 전역변수나 스택 변수 말고 힙 공간에 할당
2) 메모리 경계 침범
스트링의 끝을 나타내는 널문자가 없는 경우, 종료 조건을 만족하지 못한 스트링은 할당 공간을 넘어서도 멈추지 않는다. 메모리의 중요 영역까지 침범할 수 있는 것이다. 이런 문제가 스트링이 아닌 배열에서 발생한다면, 그것을 버퍼 오버플로우 에러라고 한다.
해결법
- 메모리 검사 도구 사용
- C++ 스타일 string, vector 사용
3) 메모리 누수
메모리를 할당한 다음 해제하지 못하는 것. 포인터를 놓치는 경우에 발생할 수 있다.
해결법
- 스마트 포인터의 사용
- 프로그래머간의 의사소통
4) 댕글링 포인터(Dangling Pointer)
포인터를 해제한 메모리를 계속해서 사용하는 것. 해결법
- 포인터 해제 후 nullptr로 초기화