프로그래밍

Dangling Pointer

panpro 2006. 10. 10. 20:20

Dangling Pointer는 더 이상 참조할 수 없는 포인터를 가리킨다.
Dangling Pointer는 두가지가 있는데, 하나는 의도적인 거고, 하나는 버그다.

아래 델파이 코드를 보자.
var P: Pointer;

begin
  P := nil;
  if Assigned (P) then Writeln ('You won''t see this');
  GetMem(P, 1024); {P valid}
  FreeMem(P, 1024); {P no longer valid and still not nil}
  if Assigned (P) then Writeln ('You''ll see this');
end;

위와 같을 경우, 맨 마지막, Pointer P가 바로 Dangling poingter다. Free만 시키고 NIL을 가리키지 않은 상태. 이게 Dangling Pointer의 첫번째 유형이다.
이 경우 NIL이 아니기 때문에 Assigned 함수로도 찾아낼 수 없다.


두번째 경우는 버그다.
C++의 경우,

CPoint * ppt = new CPoint();
ppt = new CPoint();

이렇게 한다면 첫번째 ppt는 프로그램 내에서 더 이상 참조할 수가 없다.
이 경우에도 ppt가 Dangling Pointer가 되는데, 이건 버그다 .