****PChar操作异常,看了好久还是不懂怎么办?或者谁有pchar操作容易出现的错误的文章? ( 积分: 100 )

  • 主题发起人 主题发起人 Toysun
  • 开始时间 开始时间
T

Toysun

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥帮帮看看,我把string写入流,用pchar读出来,释放pchar出错
代码如下:
procedure aa(b: string);
begin
ShowMessage(b);
end;
//这里写的很杂,因为是我的程序数据流的简写
procedure TForm1.Button1Click(Sender: TObject);
var
FSendBuffer: TMemoryStream;
a:PChar;
b,s:String;
begin
FSendBuffer:=TMemoryStream.Create;

b:=Edit1.Text;
//写入流
FSendBuffer.Clear;
FSendBuffer.Write(b, Length(b));
//pchar分配内存
GetMem(a,FSendBuffer.size);
//读出内容
FSendBuffer.Seek(0,soFromBeginning);
FSendBuffer.Read(a,FSendBuffer.Size);
//转换成string
s:=a;
aa(s);
//pchar释放内存
FreeMem(a,FSendBuffer.Size)
//此处出错'Invalid pointer operation',
//a:=nil也一样
//注释掉出不可预知错
FSendBuffer.Free;
end;
 
各位大哥帮帮看看,我把string写入流,用pchar读出来,释放pchar出错
代码如下:
procedure aa(b: string);
begin
ShowMessage(b);
end;
//这里写的很杂,因为是我的程序数据流的简写
procedure TForm1.Button1Click(Sender: TObject);
var
FSendBuffer: TMemoryStream;
a:PChar;
b,s:String;
begin
FSendBuffer:=TMemoryStream.Create;

b:=Edit1.Text;
//写入流
FSendBuffer.Clear;
FSendBuffer.Write(b, Length(b));
//pchar分配内存
GetMem(a,FSendBuffer.size);
//读出内容
FSendBuffer.Seek(0,soFromBeginning);
FSendBuffer.Read(a,FSendBuffer.Size);
//转换成string
s:=a;
aa(s);
//pchar释放内存
FreeMem(a,FSendBuffer.Size)
//此处出错'Invalid pointer operation',
//a:=nil也一样
//注释掉出不可预知错
FSendBuffer.Free;
end;
 
错了两个地方:
1、
  FSendBuffer.Write(b, Length(b));
改成:
  FSendBuffer.Write(b[1], Length(b));
2、
  FSendBuffer.Read(a,FSendBuffer.Size);
改成:
  FSendBuffer.Read(a[0],FSendBuffer.Size);
 
ok,解决了,谢谢smokingroom
 
后退
顶部