首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法强制使应用程序崩溃的指针无效

无法强制使应用程序崩溃的指针无效
EN

Stack Overflow用户
提问于 2012-04-14 15:12:14
回答 2查看 271关注 0票数 2

我们有一个类来表示一个非常大的应用程序中的列表:

代码语言:javascript
复制
CSMLNode
{
   CSMLNode *pChild;
   CSMLNode *pSibling;  

   CSMLNode()
   {
     pChild = NULL;
     pSibling = NULL;
   }         
}

为了进行优化,创建的节点对象保存在一个池中,并在应用程序的整个生命周期中重用。仅当节点对象的数量超过特定计数时,才释放节点对象。当节点对象释放到池中或从池中取出时,pChildpSibling的值不会设置为NULL。我们怀疑这会在应用程序中造成崩溃。

我计划将pChild和pSibling的值设置为0xDDDDDDDD,如果从池中获取节点对象时它的值不为NULL。我的意图是在从池中获取节点对象后,在没有设置指向pChildpSibling的适当对象指针的情况下访问pChildpSibling指针时,会强制使应用程序崩溃。

这会像我期望的那样工作吗?如果没有,我应该为强制访问冲突提供什么指针值。

我已经启用了全页堆,以便尽可能早地获取访问冲突。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-14 15:59:28

Visual Studio调试CRT已经做到了这一点。从堆中分配的内存将初始化为0xcdcdcdcd。因为你的struct包含指针,所以取消引用未初始化的指针将自动生成AV。调试堆初始化值为documented here

你不需要帮忙。避免保留自己的池,在Windows低碎片堆的充分帮助下,CRT已经做得很好了。如果您想保留它,那么我建议您使用与debug CRT相同的方法。不要跳过它所做的其他事情,无人区是及早发现内存损坏的绝佳方法。

票数 4
EN

Stack Overflow用户

发布于 2012-04-14 15:14:38

它调用未定义的行为,这可能会也可能不会使您的应用程序崩溃。它还可能做其他不受欢迎的事情。

即使只是将值0xDDDDDDDD存储为指针(而不去引用它)也是未定义的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10151782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档