-
댕글링 포인터 문제: 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;
반응형'알고리즘 > 정리 및 오류 해결 방법' 카테고리의 다른 글
Cannot initialize a variable of type 'int' with an rvalue of type 'void *' 에러 해결법 (0) 2018.12.09 c++ malloc() 함수 설명 (0) 2018.12.09 std::cout string int 같이 쓰는 법 (0) 2018.11.25 c++ 에서 using namespace 를 장려하지 않는 이유 (0) 2018.11.25 c++ 오류 해결법 : Use of undeclared identifier '함수명' (0) 2018.11.20