Notice
Recent Posts
Recent Comments
Link
Love Every Moment
〔C언어〕댕글링 포인터(Dangling Pointer)란? 본문
반응형
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
컴퓨터 프로그래밍 코딩 교육
반응형
'PROGRAMMING::LANGUAGE > C' 카테고리의 다른 글
〔C언어〕서식지정자(Format Specifier)란? (0) | 2021.06.12 |
---|---|
〔C언어〕메모리 누수 검사하기 (0) | 2021.06.04 |
〔C언어〕정적 변수(Static Variable)란? (0) | 2021.05.19 |
〔C언어〕size_t 와 unsigned int 의 차이? (0) | 2021.05.07 |
〔CS50 / C언어〕자료구조: 메모리 할당, 연결 리스트, 해시 테이블, 트라이, 스택, 큐, 딕셔너리 (0) | 2021.02.26 |
Comments