初识DELPHI,指针释放问题!

bamfk10231023 2006-12-29 12:00:01
procedure TForm1.Button1Click(Sender: TObject);
var
x: integer ;
p: ^integer ;
begin
new(p) ;
x := 10 ;
p^ := x ; // 指针内存地址与x 不一致
p := @x ; // 指针内存地址与x 对致
//如果有 p:=@x ,Dispose(p)会提示错误的指针操作
Dispose(p);
end;

是不是指针都用在 Record 记录中?
关于指针的内存分配释放有哪些注意事项?
...全文
434 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowstar 2007-01-02
  • 打赏
  • 举报
回复
在哪儿new的就在哪儿free
ZyxIp 2007-01-02
  • 打赏
  • 举报
回复
前面申请的内存是找不回来了.因为没有保存申请的位置.

所以一定要记得不要造成这样的内存泄漏
qjinshanq 2007-01-02
  • 打赏
  • 举报
回复
这个问题我也碰到过,那如果前面new了之后,该怎么处理呢?
wudi_1982 2006-12-29
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
x: integer ;
p: ^integer ;
begin
new(p) ;
ShowMessage(Format('p当前指向地址:%d',[integer(p)]));
x := 10 ;
p^ := x ;
ShowMessage(Format('p当前指向地址:%d',[integer(p)]));
p := @x ; // 执行了这一句,你的指针p所指向的地址就变成了x的地址
ShowMessage(Format('p当前指向地址:%d;x的地址%d',[integer(p),integer(@x)]));

Dispose(p); //因为你改变了p的指向,所以此时你调用dispose是错误的
end;

我在你的代码中加了几句,你可以看看

指针并不一定都用在record中,他仅仅指向一个地址
ahjoe 2006-12-29
  • 打赏
  • 举报
回复
当执行时,p := @x,前面申请的内存就不知道扔哪儿去了。
bamfk10231023 2006-12-29
  • 打赏
  • 举报
回复
有点明白!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧