레코드 변수의 포인터 형의 배열을 사용하고 싶어서 다음처럼 하였는데요
실행할때 gvaryPDB[nLoop].name := G_MyCeContacts.Contact.PRENAME; 이부분에서
다음과 같은 에러가 납니다..
** 선언 **
TCDBRec = Record;
TpCDBRec=^TCDBRec;
gvaryPDB : array of TpCDBRec;
///////////////////////////////////////////////////////
** 사용 **
for nLoop := 0 to 4 do
begin
Setlength(gvaryPDB, 4 );
gvaryPDB[nLoop].name := G_MyCeContacts.Contact.PRENAME;
///////////////////////////////////////////////////////////////
** 실행에러 **
Access violation at address 004044DO in modlue. Write of address 0000010.
아무래도 인덱스값을 잘못줘서 그런거 같은데요 어떻게 고쳐야 될까여?
포인터를 쓰실려면 먼저 메모리 할당을 받으셔야 합니다.
GetMem이나 New등의 함수를 이용해서 메모리 할당 받고, 다 쓰신후에 FreeMem이나 Dispose등의 함수를 이용해서 메모리를 해제해주시면 됩니다.
그리고 동적 배열의 메모리를 할당하는 SetLength는 for문 밖으로 빼야 겠네요...
Setlength(gvaryPDB, 4 );
for nLoop := 0 to 3 do // <= 여기도 3이 맞는거 같은데... 4자리 할당했으니까...
begin
New( gvaryPDB[nLoop] ); // 포인터에 메모리 할당
gvaryPDB[nLoop].name := G_MyCeContacts.Contact.PRENAME;
......
end;
다 쓴후에...
for nLoop := 0 to 3 do // <= 여기도 3이 맞는거 같은데... 4자리 할다했으니까...
begin
Dispose( gvaryPDB[nLoop] ); // 포인터의 메모리 해제
end;
Setlength(gvaryPDB, 0); // 동적배열해제
^^ 항상 즐코하세요...