7장 - 흔히 발생하는 메모리 문제

1) 스트링 과소 할당 문제

C 스타일 스트링이 들어갈 공간을 할당할 때, 스트링의 끝을 나타내는 \0이 들어갈 공간을 빼먹을 경우에 발생한다.

해결법

  • C++스타일 string 사용
  • 버퍼를 전역변수나 스택 변수 말고 힙 공간에 할당

2) 메모리 경계 침범

스트링의 끝을 나타내는 널문자가 없는 경우, 종료 조건을 만족하지 못한 스트링은 할당 공간을 넘어서도 멈추지 않는다. 메모리의 중요 영역까지 침범할 수 있는 것이다. 이런 문제가 스트링이 아닌 배열에서 발생한다면, 그것을 버퍼 오버플로우 에러라고 한다.

해결법

  • 메모리 검사 도구 사용
  • C++ 스타일 string, vector 사용

3) 메모리 누수

메모리를 할당한 다음 해제하지 못하는 것. 포인터를 놓치는 경우에 발생할 수 있다.

해결법

  • 스마트 포인터의 사용
  • 프로그래머간의 의사소통

4) 댕글링 포인터(Dangling Pointer)

포인터를 해제한 메모리를 계속해서 사용하는 것. 해결법

  • 포인터 해제 후 nullptr로 초기화