Q&A

  • [급질문] call by addres 로 부른 동적배열을 setlength 할 때 에러
call by addres 로 부른 동적배열을 setlength 할 때 에러가 발생합니다.

어떻게 해야되죠????....맨날맨날 질문만 올리는군요 -_-;;

3일똥안끙긍데도.해결못했습니다..벌써..쁘로젝트기한음.넘기고흑흑..제발좀.



첫번째 소쓰 setlength를 이용한방법(델파이동적배열이용)

procedure TLogProcess.MessageReport(var AnalRecord : Array of TAnalRecord; var MsgMaxnum : Integer; MsgFlag : Boolean; Kind : Integer);

var

j : integer;

begin

MsgFlag := False;

For j:=0 to MsgMaxNum-1 do

begin

if AnalRecord[j].Subject = LogProcess.LogRecord.reson then

begin

MsgFlag := True;

break;

end;

end;

if MsgFlag = True then

inc(AnalRecord[j].Sendnum, 1) //!!!!!!!!여기여기에러에러

else

begin

SetLength(AnalRecord, MsgMaxNum+1);

AnalRecord[MsgMaxNum].Subject := LogProcess.LogRecord.reson;

AnalRecord[MsgMaxNum].Sendnum := 1;

inc(MsgMaxNum,1);

end;

end;





두번째 소쓰 reallocmem를 이용한방법(옛날에쓰던방법)

이거는 되기는 되는데요....점점갈수록..쫌(아니엄청시리) 느려짐미다..

아마..리엘록멤이라는놈에...엘록멤할때마다.배열 전체.메모리를..다시쓰는것같은데.

따른방법없나요??

type

TAnalRecord = record // email host별 리포르를 위한 자료형

subject : ShortString; // email또는 host이름

Sendnum : Integer; // 받은수

Recnum : Integer; // 보낸수

end;

AAnalRecord = Array[0..0] of TAnalRecord;

PAnalRecord = ^AAnalRecord;



procedure TLogProcess.MessageReport(var AnalRecord : PAnalRecord; var MsgMaxnum : Integer; MsgFlag : Boolean);

var

j : integer;

begin

{ Report41 }

MsgFlag := False;

For j:=0 to MsgMaxNum-1 do

begin

if AnalRecord[j].Subject = LogProcess.LogRecord.reson then

begin

MsgFlag := True;

break;

end;

end;

if MsgFlag = True then

inc(AnalRecord[j].Sendnum, 1)

else

begin

ReallocMem(AnalRecord, (MsgMaxNum+1)*Sizeof(TAnalRecord));

AnalRecord[MsgMaxNum].Subject := LogProcess.LogRecord.reson;

AnalRecord[MsgMaxNum].Sendnum := 1;

inc(MsgMaxNum,1);

end;

end;



0  COMMENTS