Q&A

  • [질문] 포인터 관련 다음 코드가 오류가 나지 않는 이유가 뭘까요?
<!--CodeS-->
type
  PData = ^TData;
  TData = record
    A,
    B: Integer;
  end;

-----------

procedure TForm1.Button1Click(Sender: TObject);
var
  A: PData;
begin
  New(A);

  A^.A := 1;
  A^.B := 2;

  caption := inttostr(A^.A + A^.B);

  Dispose(A);

  caption := inttostr(A^.A + A^.B + 10);
end;
<!--CodeE-->


분명히 New로 메모리를 할당 받고 Dispose로 해제했지만 caption의 결과는 13입니다.

오류도 전혀 나지 않고요.

그리고 A^.A 이런식으로 역참조를 하지 않고 A.A만 해도 원하는 값을 얻을 수 있는 이유는 뭔가요?

궁금합니다...
2  COMMENTS
  • Profile
    최용일 2010.11.12 21:34
    다른곳에 그 메모리 영역이 할당되지 않았으면 접근이 가능합니다.
    메모리해제하고 바로 그 곳을 억세스하면 대부분의 경우는 에러없이 접근할 수 있습니다.

    델파이에서 포인터참조는 묵시적(implicit)으로 사용할 수 있습니다.
    explicit use: A^.A
    implicit use: A.A
  • Profile
    이승걸 2010.11.12 21:37
    그렇군요.. 정말 감사합니다. 복 받으세요.