PROGRAMMING::LANGUAGE/C
〔C언어〕댕글링 포인터(Dangling Pointer)란?
해 송
2021. 5. 27. 19:56
반응형
1. 댕글링 포인터란
malloc() 함수를 이용하여 동적 메모리를 할당한 후에는 free() 함수를 통해 할당된 메모리를 해제한다.
하지만 포인터가 여전히 해제된 메모리 영역을 가리키고 있을 때에 문제가 될 수 있다.이것을 댕글링 포인터라고 부른다.
2. 문제점
- 메모리 접근시 예측 불가능한 동작을 일으킬 수 있다.
- 메모리 접근 불가 시 Segmentation fault 가 발생한다.
- 잠재적인 보안 위험이 있을 수 있다.
3. 예제
int *ptr;
ptr = (int *)malloc(sizeof(int));
*ptr = 1;
printf("%d\n", *ptr);
free(ptr);
*ptr = 2;
처음에 *ptr 을 1 로 출력하고 나서 메모리를 해제해주었는데
ptr 은 여전히 처음 할당된 메모리 영역을 가리키고 있다.
여기서 다시 *ptr = 2 처럼 해제된 메모리 영역에 접근하게 되면 문제가 발생할 수 있다.
4. 해결 방법
int *ptr;
ptr = (int *)malloc(sizeof(int));
*ptr = 1;
printf("%d\n", *ptr);
free(ptr);
ptr = NULL;
free() 함수를 이용하여 메모리를 해제한 다음에는 포인터를 NULL 로 설정한다.
그러면 포인터가 더 이상 해제된 메모리 영역을 가리키지 않으므로 잘못된 메모리 영역을 참조하지 않게 된다.
참고: https://stackoverflow.com/questions/17997228/what-is-a-dangling-pointer
컴퓨터 프로그래밍 코딩 교육
반응형