댕글링 포인터는 해제된 메모리 영역을 여전히 참조하고 있는 포인터이다. 즉, 이미 해제된 공간을 가리키고 있지만 프로그램 상에서는 여전히 포인터를 사용하려 하기 때문에 문제가 발생한다. 특히 접근 오류(Segmentation Fault)를 유발하거나 보안 취약점의 원인이 되기도 한다.
댕글링 포인터가 발생하는 상황
int *ptr = (int *)malloc(sizeof(int));
*ptr = 42;
free(ptr); // 메모리 해제
*ptr = 50; // 이 시점에서 ptr은 댕글링 포인터
댕글링 포인터를 예방하는 방법
free(ptr);
ptr = NULL;
메모리가 해제된 후에는 포인터를 NULL로 설정하는 것이 좋다.
free로 해제한 후 ptr을 NULL 바꾸기 전 주소의 값은 초기화되지 않고 그대로이다.
만약 ptr이 1004번지를 가리키고 있었고 1004번지의 값이 3이고 free로 ptr의 메모리를 해제해도 1004번지의 값은 3이라는 것이다.
728x90
'C언어' 카테고리의 다른 글
[C언어] 다중 평가 문제 (0) | 2024.10.17 |
---|---|
[C언어] typedef uint8_t BOOL (2) | 2024.10.17 |
[C언어] main문이란? (0) | 2024.10.14 |
[C언어] static 키워드란? (0) | 2024.10.11 |
[C언어] volatile 키워드란? (0) | 2024.10.11 |