关于指针释放的问题

山娃马小三儿 2010-10-01 02:52:46
定义一个记录类型及指针,代码如下
type
PTreeNodeInfo =^TTreeNodeInfo;
TTreeNodeInfo =record
TreeNodeID :Integer;
TreeNodeName :PChar;
TreeNodeStatus :String;
TreeNodeType :Integer;
DTUID :String;
MeterID :String;
TSock :TCustomWinSocket;
end;

定义两个PTreeNodeInfo类型的变量,
var
PNode, TNode :PTreeNodeInfo
然后
New(PNode);
.....//赋值操作
然后TNode :=PNode;
当PNode释放既Dispose(PNode)后,怎么能够检查的到此指针已经释放,然后通知TNode,因为在这个时候调用 TNode^.TSock.Connected会报错,怎么可以检测到这个错误,如果不用try...except的话??


不知道我表达清楚了没有
...全文
80 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
TNode是用再多线程里面的,根本没法通知,因为不知道tnode有没有创建。
回复
武稀松 2010-10-02
TTreeNodeInfo 你定义成Class不是更好,用Free.在析构函数里面通知不就行了
回复
haitao 2010-10-02
所以,我是主张在Ttreenode里除了data,还需要一个stringdata
TTreeNodeInfo的所以字段编码为一个字符串,直接放在stringdata
就免得分配有释放的麻烦了
回复
sxqwhxq 2010-10-01
freeandnil
回复
SQLDebug_Fan 2010-10-01
你可以在释放PNode的同时把TNode := nil就可以了,两个变量同时操作。
回复
wxieyang 2010-10-01
这种情况是检测不到的,两个毫无关联地指针虽然指向了同一个地方,但是因为windows没有这种主动通知的能力,所以通过一个指针释放内存,另一个指针是得不到通知的

如果你想得到通知,自己弄个列表,记录所有指向这块内存的指针,释放的时候,逐一处理。
回复
发动态
发帖子
Windows SDK/API
创建于2007-08-02

1145

社区成员

Delphi Windows SDK/API
申请成为版主
社区公告
暂无公告