这是DELPHI帮助中的例子,原样复制下来:
procedure TForm1.Button1Click(Sender: TObject);var
iFileHandle: Integer;
iFileLength: Integer;
iBytesRead: Integer;
Buffer: PChar;
i: Integer
begin
if OpenDialog1.Execute then
begin
try
iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
iFileLength := FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer := PChar(AllocMem(iFileLength + 1));
iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
FileClose(iFileHandle); for i := 0 to iBytesRead-1 do
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cells[1,i+1] := Buffer[i];
StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
end;
finally
FreeMem(Buffer);
end;
end;
end;当招待完这条语句后,即iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
Buffer突然是空了.
正常应该Buffer里面是从文件中读取的数据,但是它里面什么也没有,而当执行
FreeMem(Buffer)时,程序就出错了,出错提示大概是引用了一个空的变量.请问大家,这倒底是什么原因,如何解决?
procedure TForm1.Button1Click(Sender: TObject);var
iFileHandle: Integer;
iFileLength: Integer;
iBytesRead: Integer;
Buffer: PChar;
i: Integer
begin
if OpenDialog1.Execute then
begin
try
iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
iFileLength := FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer := PChar(AllocMem(iFileLength + 1));
iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
FileClose(iFileHandle); for i := 0 to iBytesRead-1 do
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cells[1,i+1] := Buffer[i];
StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
end;
finally
FreeMem(Buffer);
end;
end;
end;当招待完这条语句后,即iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
Buffer突然是空了.
正常应该Buffer里面是从文件中读取的数据,但是它里面什么也没有,而当执行
FreeMem(Buffer)时,程序就出错了,出错提示大概是引用了一个空的变量.请问大家,这倒底是什么原因,如何解决?
^这里加个指针符号就可以了,要传的是指针,不能用地址.