首页 新闻 会员 周边 捐助

Delphi的指针使用中出现错误,为什么?

0
悬赏园豆:5 [已解决问题] 解决于 2013-08-05 09:56

我是一个指针的初学者,有以下一段代码,出现问题,说是非法的指针操作,请问错误在哪里?

procedure TForm1.Button1Click(Sender: TObject);
var
  aa,bb:^Integer;
begin
  New(aa);
  New(bb);
  aa:=bb;
  aa^:=100;
  ShowMessage(IntToStr(bb^));
  Dispose(aa);
  Dispose(bb);
end;

向北方的主页 向北方 | 初学一级 | 园豆:154
提问于:2013-08-05 09:03
< >
分享
最佳答案
0

if aa <> nil then Dispose(aa);
if bb <> nil then bb := nil; //(这样写就可以)

 

你bb也指向aa了  aa释放后 bb也没了

忘记了Dispose释放的时候  只是标记这部分内存可以再用来被 new 等函数再分配,并不是把从系统申请到的内存归还给操作系统,只在程序结束时,才全部释放给操作系统。

收获园豆:5
Sam G. | 菜鸟二级 |园豆:218 | 2013-08-05 09:08

我按照你的建议重新修改了程序,但还是出现同样的问题。

向北方 | 园豆:154 (初学一级) | 2013-08-05 09:19

谢谢,让我明白了一些东西,但我还想知道,if bb <> nil then bb := nil; //(这样写就可以)好像没有必要了,这语句有什么作用吗?

向北方 | 园豆:154 (初学一级) | 2013-08-05 09:51

虽然bb指针指向的地址没值了,但他还指向了一个不可用的地址,因为后续如果有其他操作都会用是否等于nil或者是是否有引用来判断当前指针是否可操作的,所以一般把“undefined ”这种的都赋个nil值,

 

Use Dispose in Delphi code to free the memory which a pointer addresses. After a call to Dispose, the value of P is undefined and it is an error to reference P.

Sam G. | 园豆:218 (菜鸟二级) | 2013-08-05 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册