关于网友提出的“ 帮忙看看这段程序有什么错误”问题疑问,本网通过在网上对“ 帮忙看看这段程序有什么错误”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 帮忙看看这段程序有什么错误
描述: 这是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)时,程序就出错了,出错提示大概是引用了一个空的变量.
请问大家,这倒底是什么原因,如何解决?
解决方案1: function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;定义中第二个参数是传址参数,所以要将变量做为地二个参数,传递的就是地址;所以是buffer^;如果是buffer则传递的是这个指针变量的地址而不是在文件中读到的字符穿的地址。
解决方案2: iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
^这里加个指针符号就可以了,要传的是指针,不能用地址.
解决方案3: 你看一看用OpenDialog打开的文件他能读取吗?
以上介绍了“ 帮忙看看这段程序有什么错误”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2909826.html