【发布时间】:2011-10-22 07:34:50
【问题描述】:
我正在使用 Poco C++ 库并导致奇怪的问题。
Poco 使用自己的共享指针类SharedPtr 进行内部指针操作。在我的情况下,静态对象Poco::SSLManager 具有证书处理程序对象的SharedPtr 成员。当程序运行结束时,静态对象被删除并且我捕捉到分段错误。
使用 GDB 调试器我看到核心转储并且不理解问题。删除SharedPtr对象(简单操作:delete pObj)时出现段错误,但对象有有效地址,如-0x8fcbed8。
为什么删除有效地址的指针会导致分段错误?
可能是因为对象在应用程序的fork副本中创建并在main中销毁?
【问题讨论】:
-
删除对象指针前检查空指针,删除操作后设置为空。
-
SharedPtr 通常具有
ptr->Release()功能。看看吧 -
@Reddy:在调用
delete之前不要检查null,因为它被定义为对null指针不执行任何操作。 -
2 Gasim,年份 ptr 在发布调用之前检查并在之后设置为空。
标签: c++ memory-management fork shared-ptr poco