dangling pointer란 무엇인가?
반환된 동적할당 메모리 공간을 가리키는 포인터를 말한다.
c언어에서 malloc/calloc/realloc등으로 동적할당한 메모리 공간을 free()로
프로세스 heap에서 지우고 반환했지만 포인터는 초기화하지 않는 경우 발생한다.
free()로 반환된 메모리 공간은 다른 프로세스가 접근해서 할당해 사용할 수 있다.
원래 프로세스는 서로 격리되어 메모리에 접근할 수 없지만
dangling pointer가 생기면 접근할 수 있게 되는 문제가 발생한다.
이는 프로세스 실행 오류와 보안 문제가 발생할 수 있다.
free()로 초기화해준 메모리 공간 포인터를 NULL을 할당해서 포인터를 초기화해주면 된다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int *)malloc(5 * sizeof(int));
for (int i = 0; i < 5; i++) {
arr[i] = i * i;
}
printf("%d\n", arr[3]);
// 동적할당한 메모리 공간을 프로세스 heap에서 지워준다.
free(arr);
// dangling pointer가 되지 않도록 NULL로 바꿔준다.
arr=NULL;
return 0;
}