할당된 메모리 영역을 가리키는 포인터가 있다. 그런데 메모리 영역이 해제된다면 어떻게 될까?
해제된 메모리 영역을 가리키고 있는 포인터를 댕글링 포인터(Dangling Pointer, 허상 포인터)라고 한다. 동적 할당 된 포인터를 free
하면 메모리 영역은 해제되지만 포인터는 삭제되지 않고 계속 남아있는 것이다.
int *ptr = (int * )malloc(sizeof(int));
*ptr = 5;
printf("*ptr: %d\n", *ptr);
free(ptr); // ptr은 댕글링 포인터
free(ptr);
*ptr = 10; // 오류 발생
Segmentation fault
(윈도우의 경우 general protection fault)free
후 포인터를 NULL
로 처리해준다.free(ptr);
ptr = NULL;
#define FREE(ptr) if(ptr) {free(ptr); ptr = NULL;}
댕글링 포인터와 비슷한 경우로 와일드 포인터도 있다.
이상하게 댕글링 포인터 개념이 가끔 헷갈린다.
이제 확실하게 짚고 넘어가자!
📚 참고
https://thinkpro.tistory.com/67
http://itnovice1.blogspot.com/2019/10/c-dangling-pointer.html
https://ko.wikipedia.org/wiki/%ED%97%88%EC%83%81_%ED%8F%AC%EC%9D%B8%ED%84%B0#%EC%99%80%EC%9D%BC%EB%93%9C_%ED%8F%AC%EC%9D%B8%ED%84%B0%EC%9D%98_%EC%9B%90%EC%9D%B8