分配内存(100分)

  • 主题发起人 主题发起人 msglzcx
  • 开始时间 开始时间
M

msglzcx

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
input,output: PChar;
begin
getmem(output,1);
output := '1234567';
OutStr(input,output);
ShowMessage(output);
end;

procedure TForm1.OutStr(input: PChar;var output: PChar);
begin
output := 'C#中如何调用Delphi写的Dll,实现画图功能 点击: 发布日期:2007-11-22 13:42:22 ';
end;

// 1: output 分配内存1 怎么都返回了?
2: 为什么不分配内存也行?
 
getmem(output,1);
output := '1234567';
在这里内存已经泄露了.文字常量字符串赋值给PChar,就是给指针赋值,并不是拷贝字符过去.所以output指向的内存区变了.不信你可以用ShowMessage(IntToStr(Integer(output)))查看.
 
pchar是个指针
你改了指向
不过就是增加了一点垃圾
 
同意楼上
getmem(output,1);确实是分配了,但是output := '1234567'把指针改了,分配的那1个就是垃圾了,都没法FREE了。
 
楼上都说了,改成这样就可以了(注意你原来没有释放内存):
var
input,output: PChar;
begin
getmem(output,7);
//output := '1234567';
strpcopy(output,'1234567');
OutStr(input,output);
ShowMessage(output);
freemem(output);//
end;
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部