Q&A

  • 동적메모리 생성 및 해제에 대해서
ㅇ 첫번째 궁금한점

TColumn = packed record
    name     : string;
    i            : integer
end;
Cols : array of TColumn;

SetLength(Cols, sizeof(TColumn));  //메모리할당
Cols[0].name := '12345';                // 값할당    
SetLength(Cols, 0);                         //메모리해제..

위와 같이 코딩했을때 맨마지막 처럼 해주면
정확히 메모리가 모두 해제 되는건가요..
Cols[0].name에 값을 넣은 부분이 맞게 해제가 되는지요.
아니면 이부분을 nil값을 채운후
SetLength(Cols, 0);  이렇게 해야 정확히 해제가 되는 건가요..

ㅇ 두번째 궁금한점
이번에는 name이 string이 아닌 array인 경우
TColumn = packed record
    name     : array of char;
    i            : integer
end;
Cols : array of TColumn;

SetLength(Cols, sizeof(TColumn));  //메모리할당
SetLength(Cols[0].name, 10);         //메모리할당
Cols[0].name[0] := '1';                  // 값할당    
SetLength(Cols, 0);                         //메모리해제..
이것도 SetLength(Cols, 0) 이렇게 하면 메모리가 모두 해제되는건가요..
아니면
SetLength(Cols[0].name, 0);
SetLength(Cols,0);
이렇게 일일이 해제를 해줘야 하는건가요..




2  COMMENTS
  • Profile
    김경록 2003.11.23 01:17
    - 첫번재 궁금증의 답변
    - 두번째 궁금증의 답변

    기본적으로 SetLength로 할당된 것은
    Initialize(변수);      <--------  이건 초기화
    Finalize(변수);       <-------- 이건 메모리 제거

    여기서 Finalize(변수) 부분은
    변수 := Nil;

    과 똑같은 의미입니다..

    SetLenth 말고 GetMem, FreeMem이란 것으로
    동적 "할당/해제"가 가능합니다..
    물론, 사용법은 비슷하구여..
    제 개인적인 델파이 경험상으로
    델파이에서 동적으로 생성한 것은 무조건
    Nil을 대입해 줘야 메모리 누수 현상을 막을 수 있는 것 같았습니다..
    답변이 되었길 바랍니다..





  • Profile
    KDDG_Apine 2003.11.21 05:49
    저두 확실히는 잘 모르지만 제가 알고 있는것을 적겠습니다. 제가 알고 잇는 것이 틀리면 다른분이 지적해 주세요.

    님이 말한것은 구지 그렇게 하지 않아도 해제가  되는 걸로 알고 있습니다.
    너무 걱정하시지 말구 사용하세요.