TIL - dangling pointer

손찬호·2024년 4월 17일
0

TIL

목록 보기
15/21

dangling pointer란 무엇인가?
반환된 동적할당 메모리 공간을 가리키는 포인터를 말한다.

언제 dangling pointer가 될까?

c언어에서 malloc/calloc/realloc등으로 동적할당한 메모리 공간을 free()로
프로세스 heap에서 지우고 반환했지만 포인터는 초기화하지 않는 경우 발생한다.

dangling pointer가 있으면 무슨 문제가 생기는가?

free()로 반환된 메모리 공간은 다른 프로세스가 접근해서 할당해 사용할 수 있다.
원래 프로세스는 서로 격리되어 메모리에 접근할 수 없지만
dangling pointer가 생기면 접근할 수 있게 되는 문제가 발생한다.
이는 프로세스 실행 오류와 보안 문제가 발생할 수 있다.

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;
}
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보