如题
处理后,在退出程序是时否还需要释放data指向的内存?

解决方案 »

  1.   

    在退出程序需要释放data指向的内存{
     1.释放data指向的内存空间
     2.删除TreeNode 
    }
      

  2.   

    procedure TForm1.Button3Click(Sender: TObject);
    begin
      with TreeView1.Items do
      begin
        AddChildObject(nil, Button1.Name, Button1);
        AddChildObject(nil, Button2.Name, Button2);
      end;
    end;procedure TForm1.Button4Click(Sender: TObject);
    var
      Obj: Pointer;
    begin
      with TreeView1.Items do
      begin
        Obj := Item[0].Data;
        FreeAndNil(Obj); //释放data指向的内存空间
        Item[0].Delete;
      end;
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  3.   

    procedure TfrmMain.DBTreeRecDeletion(Sender: TObject; Node: TTreeNode);
    var
      pURL : pURLinfo;
    begin
      pURL := Node.Data;
      if pURL <> nil then dispose(pURL);
    end;我是按照上面写的,总是提示无效的指针操作
    不知道该怎样改
      

  4.   

    procedure TfrmMain.DBTreeRecDeletion(Sender: TObject; Node: TTreeNode);
    var
      Obj: Pointer;
    begin
      Obj := Node.Data;
        FreeAndNil(Obj); //释放data指向的内存空间  
    end;dispose是用来释放new分配的内存的。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  5.   

    还是出错access violation
    初始化时的代码是这样的:
    var 
      pURL: pURLinfo;
       new(pURL);
       对pURL赋值;
       Node.data := pURL;
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      PTestNode = ^TTestNode;
      TTestNode = record
        s :string;
        id :integer;
      end;  TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      TestNode :PTestNode;
    begin
      New(TestNode);
      TestNode^.s := '123';
      TestNode^.id := 123;  TreeView1.Items.Item[0].Data :=TestNode;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(PTestNode(TreeView1.Items.Item[0].Data)^.s);
      Dispose(TreeView1.Items.Item[0].Data);
    end;end.
      

  7.   

    前提条件是,你的TreeView1必须有Item[0]这个你预先定义的节点
      

  8.   

    可能是我叙述得不清楚
    用户有选择的删除某个节点,但这节点的data关联着由new申请的空间,
    我要的效果是当用户删除节点时,自动释放关联的内存空间中的数据
    但我不知道该在哪个过程里写
    我试着在onDeletion中写,但总是出错,说无效的指针操作
      

  9.   

    在onDeletion中写是对的,出现“无效的指针操作”是因为Data在onDeletion之前实际上已经被释放,只不过不等于nil。所以你要仔细检查你的代码。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  10.   

    onDeletion
    if Node<>nil then
        TOrgnaiseNode(Node.Data).Free;