이미지 출처 : https://www.geeksforgeeks.org/memory-layout-of-c-program
C 언어의 메모리 구조는 위와같이 코드, 데이터, 힙 그리고 스택 영역으로 나누어져 있다.
이미지 출처 : https://plumbr.io/blog/memory-leaks/native-memory-leak-example
메모리 릭은 프로그램이 불필요한 메모리를 계속 점유하는 현상이다. 일반적으로 프로그램 가동 시간 혹은 사용량에 비례해서 프로그램의 메모리 사용량이 점점 늘어나는 것으로 확인할 수 있다. 메모리 릭은 힙 영역에 할당된 메모리를 해제하지 않아서 발생한다. C언어에서는 힙 영역에 동적 메모리를 할당한다. 그런데 힙 영역에 할달된 메모리는 함수호출이 종료되어도 해제되지 않는다. free() 등을 이용해서 사용이 완료된 메모리를 명시적으로 해제 해 주어야 하는데, 이 메모리가 해제되지 않으면 메모리 릭이 발생한다.
이미지 출처 : https://stackoverflow.com/questions/17997228/what-is-a-dangling-pointer
댕글링 포인터(허상 포인터)는 이미 해제된 메모리를 가르키는 포인터를 뜻한다. 동적할당된 메모리를 가리키는 포인터가 있다고 생각해보자. 포인터는 메모리가 동적할당된 공간(힙)에 정상적으로 있다고 알고 있다. 만약 여기서 동적할당된 메모리가 해제되면 해당하는 공간을 가리키던 포인터에 있는 주소 공간은 아무런 의미가 없게 된다. 이 때 포인터에 저장된 주소공간에서 데이터를 가져오면 예측 불가능한 동작을 일으킬 수 있다.