1. 정의
메모리에서 해제 된 공간(ex. free(ptr))을 가리키는 포인터 (허상 포인터)
2. 발생 원인
- free를 통해 메모리를 해제했지만 해당 포인터변수가 해제된 메모리 주소를 가지고 있는 경우.
- 블록 스코프 내에서(ex. 임의의 함수 내에서) 할당된 변수의 주소를 가리키고 블록이 끝난 경우
3. 증상
Segmentation fault
memory access deny -> 예측 불가능한 동작
4. 해결 방법
- free 할 경우 메모리 해제 이후 해당 포인터변수를 자동으로 NULL을 가리키게한다.
free(ptr)
ptr = NULL;
- Dangling Pointer 문제를 자동으로 발견하게 해주는 third party tool 사용
5. 예제
free해도 Dangling Pointer가 되지 않는 경우
stack segment에 할당된 변수는 block scope를 벗어나는 시점에 자동으로 해제된다.
반면, free를 통한 명시적 메모리 해제는 Heap Segment에 할당된 주소를 해제할 때 쓰인다.
⚠️ free로는 stack segment에 할당된 변수를 해제할 수 없다.
[Dangling Pointer 문제 발생 예제]
문제 해결
📝 결론
C++ 이나 JAVA에서의 new- delete도 malloc - free와 맥락을 같이하니
Dangling Pointer 발생을 예방하여 메모리 문제 발생을 방지하자!
'C > C' 카테고리의 다른 글
매크로함수 (feat. SWAP) (0) | 2020.03.04 |
---|---|
main 함수 (feat. argc, argv) (0) | 2019.11.10 |
파일 입출력 fopen (0) | 2019.11.10 |
Memory Map 이해하기(Feat.성적처리 프로그램 소스) (0) | 2019.10.02 |
2차원 배열 이해 (0) | 2019.09.29 |