在什么情况下会出现Invalid pointer operation?(50分)

  • 主题发起人 主题发起人 touchme_1
  • 开始时间 开始时间
T

touchme_1

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个程序,使用了指向结构的指针向TTreeView添加节点,运行时一切正常,但是程
序退出时,经常提示Invalid pointer operation,不知道错在哪儿,请高手指点一下。
type
PMyRec = ^TMyRec;
TMyRec = record
a:string;
b:string;
c:string;
d:string;
e:string;
end;
var
p: PMyRec;
node:=treeview1.Items.AddChildObject(node_popupmenu_click.Parent,'新增节点
',p);
PMyRec(node.Data)^.a:='111';
如果node_popupmenu_click.Parent=nil时,退出就会出现Invalid pointer operation。
指针操作都要注意哪些细节?
 

程序退出的时候会去自动释放一些对象,所以有些地方不能把指针置为nil,否则系统去
释放内存的时候会找不到要释放的内存。就象TreeView这样的控件,子节点中的指针最
好不要去修改,可以Delete,但不要把它置为nil.
 
xinhe:
我并未把指针置为nil呀?
 
你的 P New了吗?
 
你这个Invalid与Node的释放机制有关,
因为你是用AddChildFirst加的,
所以,它必须一个父结点作为它的父结点
在释放的时候,它会作这样的检查

用指针的时候,一般没有什么要求,
不过,如果是对象的指针的话, 就需要注意其Owner参数,
这个Owner是在Create的时候作为参数传递去的。
 
接受答案了.
 
后退
顶部