请帮我看看这段代码吧,出错呀,AllocMem分的内存会和string管理的内存冲突,怎么办
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
b:PChar;
begin
str:='sdfasdf';
b:=PChar(AllocMem(1024));
FillChar(b,1024,0);//---------->把这段空间都用掉
ShowMessage(str);//------->这里的str的值已不存在了
FreeMem(b);
end;
同样的,SetLength也有同样的问题,不知这是不是delphi5的BUG
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
b:PChar;
begin
str:='sdfasdf';
b:=PChar(AllocMem(1024));
FillChar(b,1024,0);//---------->把这段空间都用掉
ShowMessage(str);//------->这里的str的值已不存在了
FreeMem(b);
end;
同样的,SetLength也有同样的问题,不知这是不是delphi5的BUG
解决方案 »
- windows.pas里面包含的函数是不是未经封装的window api?
- 如何获得指定IP的计算机当前的网络流量?
- 速度问题!!!!
- 天大喜讯:www.delphibbs.com 重开了!速度回来了!!!!
- 如何做成像资源管理器那样??
- 关于INTERNET通讯
- 急!!!delphi 控件Ip4000下载
- 用台式机控制笔记本电脑鼠标定位问题
- 求救,请问那里有Microsoft personal web servers 下载
- Delphi中有没有提取日期和时间的函数,就像VB中的Date()一样??
- 用ODAC,不能向CLOB字段写入大段汉字的问题?急!!!
- ☺☻☺今天我生日!呵呵!~~快来灌水啊!!!~~☺☻☺
var
str:string;
b:PChar;
begin
str:='sdfasdf';
b:=PChar(AllocMem(1024));
FillChar(b,sizeof(b),0);
ShowMessage(str);
dispose(b);
end;
var
str:string;
b:PChar;
begin
str:='sdfasdf';
b:=pchar(AllocMem(1024));
//strcopy(b,pchar('aa'));
fillchar(b^,1024,0);
//FillChar(b,1024,0);//---------->把这段空间都用掉
ShowMessage(str);//------->这里的str的值已不存在了
FreeMem(b);
end;
不过错误的要源是因为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);
//这句中的Buffer也是个引用值,可它一样传了个指针过来
//=======================================================
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;