알고리즘/정리 및 오류 해결 방법
댕글링 포인터 문제: free 함수를 이용해도 계속 호출 되는 문제
고수트
2018. 12. 9. 16:47
반응형
아래와 같이 변수를 malloc() 함수를 이용해 호출해 준뒤 메모리 누수를 없애기 위해 free() 함수로 해제를 하여도
계속 호출되는 문제가 발생할 때가 있다.
> int* arr = (int*)malloc(sizeof(int));
> arr[1] = 1;
> free(arr);
> std::cout << arr[1]; // ??? 값이 호출됨
이러한 문제를 댕글링 포인터 문제라고 한다. (dangling pointer problem)
이는 메모리 해제를 하였지만 해제된 메모리 주소를 포인터가 바라보고 있기 때문에 발생한다.
댕글링 포인터 해결법
따라서 이러한 문제를 방지하기 위해서는
메모리 해제이후에 포인터 변수를 NULL 로 초기화 해준다!
ex)
> int* arr = (int*)malloc(sizeof(int));
> arr[1] = 1;
> free(arr);
> arr =NULL;
반응형