개발자 면접 공부/C-C++

댕글링 포인터(Dangling Pointer)

chogyujin 2022. 7. 11. 21:23
728x90

댕글링 포인터


댕글링 포인터란?
- 포인터가 여전히 해제된 메모리 영역을 가리키고 있다면, 이러한 포인터를 댕글링 포인터(Dangling Pointer)라고 한다.

댕글링 포인터가 가르키는 메모리는 더는 유효하지 않다. 댕글링 포인터는 Premature Free(조숙한 해제, 너무 급한 해제)
라고 부르기도 한다.

 

댕글링 포인터 출처 : https://thinkpro.tistory.com/67


댕글링 포인터의 사용은 아래 목록에 나열된 문제를 포함한 다양한 문제가 있다.

 

-메모리 접근시 예측이 불가능한 동작

 

-메모리 접근 불가 시 Segmentation Fault

-잠재적인 보안 위험

 

이런 문제는 다음과 같이 동작을 할경우 발생한다.

 

-메모리 해제 후, 해제된 메모리에 접근

 

-함수 호출에서 자동 변수를 가리키는 포인터의 반환

 


- 댕글링 포인터의 코드 -

#include<iostream>

using namespace std;

int main()
{
	int* p = new int(5);

	cout << *p << endl;

	delete(p);

	*p = 10;

	return 0;
}

포인터 p를 할당한다음 이 할당된 포인터 p를 다시 메모리 해제하고 그 메모리 해제한곳을 접근할려고 하면 나오는 현상이다. 메모리 즉 힙 메모리는 해제를 정상적으로 했지만 변수 *p는 해제된 힙 메모리를 가르키고있기때문이다.

 


-해결 하는 방법-

해별하는 방법은 매우 간단하다.

메모리를 해제한후 포인터를 NULL 또는 nullptr로 처리해준다.

 

#include<iostream>

using namespace std;

int main()
{
	int* p = new int(5);

	cout << *p << endl;

	delete(p);

	p = nullptr;

	return 0;
}

'개발자 면접 공부 > C-C++' 카테고리의 다른 글

C++ 캐스팅의 종류  (0) 2022.07.14
C++ RTTI 에 대해  (0) 2022.07.14
C++ 순수 가상 함수(추상 클래스)  (0) 2022.07.12
C++ Virtual(가상) 함수  (0) 2022.07.12
C++ 포인터(Pointer) 레퍼런스(Reference) 차이  (0) 2022.07.11