运行程序时,我会从BOEHM GC获得以下错误(已定义GC_DEBUG):

GC_check_heap_block: found smashed heap objects:
0x8ef1008 in or near object at 0x8ef1010(<smashed>, appr. sz = 29)
0x8ef1188 in or near object at 0x8ef1190(<smashed>, appr. sz = 29)
...

以上持续约20次。

奇怪的是,我找不到该程序的任何问题,它可以执行该程序应该做的事情,并且不会崩溃。

我可以编译我的程序禁用GC。然后我可以用它来运行Valgrind,但奇怪的是,Valgrind没有发现任何问题!

Boehm GC中可能是一个问题 - 我应该忽略它吗?

有人有什么想法如何有效地调试这个问题吗?

或者,任何人都可以解释以上消息的准确 方法?

有帮助吗?

解决方案

三个月后回答我自己的问题...

我尝试将每个指针登录到文件中,并与发出警告的指针进行比较。但是,这并不是任何地方,犯罪嫌疑人的指针都来自整个代码库的各种分配(没有一个可能被打破的特定地方)。

同时,没有GC,Valgrind没有报告任何错误,但这当然并不意味着仍然存在错误。

但是,我想我会尝试使用该特定版本的GC是否有细微的错误。我正在使用最新的稳定版GC 7.1。我升级到7.2alpha4,问题消失了!

如果有人遇到了这一点,希望这会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top