【发布时间】:2012-04-14 07:12:13
【问题描述】:
我们有一个类来表示一个非常大的应用程序中的列表:
CSMLNode
{
CSMLNode *pChild;
CSMLNode *pSibling;
CSMLNode()
{
pChild = NULL;
pSibling = NULL;
}
}
为了优化,创建的节点对象保存在一个池中,并在应用程序的生命周期内重复使用。仅当节点对象的数量超过特定计数时才释放节点对象。当节点对象被释放到池中或从池中取出时,pChild 和 pSibling 的值不会设置为 NULL。我们怀疑这会导致应用程序崩溃。
我打算将 pChild 和 pSibling 的值设置为0xDDDDDDDD,如果从池中获取节点对象时其值不为 NULL。我的意图是强制使应用程序崩溃,当从池中获取节点对象后访问pChild 或pSibling 指针而没有设置正确的对象指针到pChild 和pSibling。
这会按我的预期工作吗?如果没有,我应该为强制访问冲突提供什么指针值。
我已启用整页堆以尽早获取访问冲突。
【问题讨论】:
-
是否有什么东西阻止你在发布期间将指针设置为 NULL?
-
我不确定。我们正在分析
-
为什么不在创建对象时将这些指针设置为适当的值(NULL 或适当的其他位置),而不管您是否在发布时将它们设为空。您的构造函数不应该让您使用随机内存。