Love Every Moment

〔C언어〕댕글링 포인터(Dangling Pointer)란? 본문

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 

컴퓨터 프로그래밍 코딩 교육

반응형
Comments