请教一下,Delphi中如何判断一个指针是否有效?比如,Dispose(p);Dispose(p),为防止第二次时出错,在之前如何能判一下p是否有效,if (?)then Dispose(p)
多谢了!

解决方案 »

  1.   

    設定一個FLAG。new(p)時:Point_Flag := true;
    if (Point_Flag) then begin
      Dispose(p);
      Point_Flag := false;
    end;
      

  2.   

    没有,只能自己在释放指针后手动置为nil,然后再判断是否为nil
      

  3.   

    是呀,,,释放内存后,,要立即将指针置空:  p:=nil;这是非常要紧的编程要求。
      

  4.   

    要么你用个try..except..把操作封起来(试试读这个指针,看看会AV不),但是很dirty
      

  5.   

    单纯的判断 p <> nil 是没意义的,也是不准确的。
    它只是表示p 指针内容不是0。
    至于这个p的内容是否有效,是没办法判断的。比如
    var 
      p:^integer;
    begin
    ...
    new(p);
    ...
    dispose(p);
    ...
    if (p<>nil) then   // 这个判断没用
      dispose(p);  // 他还会被执行除非你写成
    var 
      p:^integer;
    begin
    ...
    new(p);
    ...
    dispose(p);
    p:= nil;  // 增加他
    ...
    if (p<>nil) then   // 这个判断有用了
      dispose(p);