ㅇ 첫번째 궁금한점
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);
이렇게 일일이 해제를 해줘야 하는건가요..
- 두번째 궁금증의 답변
기본적으로 SetLength로 할당된 것은
Initialize(변수); <-------- 이건 초기화
Finalize(변수); <-------- 이건 메모리 제거
여기서 Finalize(변수) 부분은
변수 := Nil;
과 똑같은 의미입니다..
SetLenth 말고 GetMem, FreeMem이란 것으로
동적 "할당/해제"가 가능합니다..
물론, 사용법은 비슷하구여..
제 개인적인 델파이 경험상으로
델파이에서 동적으로 생성한 것은 무조건
Nil을 대입해 줘야 메모리 누수 현상을 막을 수 있는 것 같았습니다..
답변이 되었길 바랍니다..