Q&A

  • TFileStream 에서 error
var  
  SData      : string;
  i, nLength   : integer;
  DumpFile          : array of TFileStream;
....
for i := 0 to 10 do begin
  if not FileExists('c:Test' + inttostr(j) +'.Dat') then begin
     DumpFile[i] := TFileStream.create('c:Test' + inttostr(j) +'.Dat', fmCreate);
     DumpFile[i].Free;
  end;
  DumpFile[i] := TFileStream.Create('c:Test' + inttostr(j) +'.Dat', fmOpenWrite or fmShareDenyNone);
  sData := 'Testtesttest'+ #13#10;;
  nLength := length(sData);
  DumpFile[i].Seek(0, soFromEnd);
  DumpFile[i].Write(sData[1] , nLength);
  inc(i);

  DumpFile[i].Free;
  DumpFile[i] := nil;

위와 같이 하고 실행을 하면 Access violation address 00442C12 in module 'xxx.exe'라고 나오네요....
배열로 하지 않고 했을 경우는 에러가 안나는데 왜 배열로 잡으면 에러가 나는지 알려주세요...
답변 기다리겠습니다.
2  COMMENTS
  • Profile
    이순구 2003.02.05 19:42
    배열의 크기를 설정하지 않으셨네요...
    DumpFile: array[0..10] of TFileStream; 같이 미리 배열의 크기를 설정하시거나 SetLength로 나중에  설정하시거나 하면 됩니다. 지금은 당연히 메모리 할당이 안된상태니까 DumpFile[i]로 접근하면 Access violation 에러가 나겠지요..


  • Profile
    최용일 2003.02.05 19:40
    안녕하세요. 최용일입니다.

    DumpFile이 동적 배열인데... 메모리 할당해주셨나요... 코드에서는 안보이네요...

    SetLength(DumpFile, 11);
    for I := 0 to 10 do
    ......
    SetLength(DumpFile, 0);

    ^^ 항상 즐코하세요...