关于指针释放的问题

山娃马小三儿 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的话??


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

如果你想得到通知,自己弄个列表,记录所有指向这块内存的指针,释放的时候,逐一处理。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧