【发布时间】:2012-03-30 01:19:07
【问题描述】:
我正在调试一个商业软件的插件。应用程序在按下退出按钮后立即崩溃。这些崩溃出现在 windows vista 64 sp2 或 vista 32(不记得是否是 sp)上,但不会出现在 windows xp sp3 上。根据应用程序生成的崩溃日志,我似乎有一些堆问题,所以我在激活页面堆的情况下进行调试。
几乎从零开始,我拿了一个插件示例代码,在其中我逐渐添加了我的代码。我的插件添加了一个按钮来创建我的工具。工具和按钮是两个独立的 COM 对象。始终会创建按钮,但仅当我按下按钮时才会创建工具对象。 现在,我在工具部分添加了一些代码,代码没有执行,甚至没有创建工具对象,但是程序崩溃了。没有那部分代码,它不会。它似乎不依赖于代码的那部分,当我对其进行注释并在其他地方添加一些代码(不会执行)时,程序以同样的方式崩溃。
adplus 告诉我:损坏的堆指针或使用错误的堆 xx : 调用中使用的堆 xx : 堆块 xx : 块大小 xx : 拥有区块的堆
我可以从任何想法或调试策略开始吗?
谢谢。
【问题讨论】:
-
一些代码会很有用。一个简单的复制案例。
标签: c++ debugging com heap-memory