Q&A

  • TStringList 해제시..


메모리 해제시



StList.Free;



이렇게 하잖아요



흠..그런데..만약 Create 되지 않은 StringList를 해제하면 에러가



나는건 당연한데.. ^^



그 변수가 Create되었는지 안되었는지 체크를 해서



Free를 시켜주려고 하는데...



Assigned를 써도 안되고..흠..nil 비교를 해도 안되고 --



어떻게 해야 Create되어있는지를 알죠?..알려주세요^^;



1  COMMENTS
  • Profile
    이정식 2001.05.25 04:57
    var

    SList: TStringList;



    전역변수인 경우에는 SList는 nil로 초기화되어 있습니다. 그래서

    if SList <> nil then SList.Free;

    하면 되지요.



    그런데 Free를 한 후에 다시 사용하는 경우도 있다면 Free할때마다 반드시

    if SList <> nil then

    begin

    SList.Free;

    SList := nil;

    end;

    을 해서 SList가 Free되었음을 알 수 있도록 해 주는게 중요합니다.



    지역변수인 경우에는 SList는 nil로 초기화되지도 않지만 nil로 초기화되어 있을 필요도 없습니다. 왜냐하면 전역변수인 경우에는 여기저기서 어떻게 사용될지 알 수 없는 경우가 많지만 지역변수인 경우에는 사용처가 뻔하기 때문이지요. 단하나 주의해야 할 것은 Create()후 Free()하는 것을 빠뜨리지만 않으면 됩니다. 그러러면 다음과 같이



    SList := TStringList.Create;

    try

    .....

    .....

    finally

    SList.Free;

    end;



    try .. finally .. 로 확실하게 Free되도록 보증해 주면 다른 어려움은 거의 없으리라 봅니다.