我写了我自己的引用计数的内存管理器c++(为了好玩),我确定它不是完美的;)。现在,当我尝试使用它时,我得到了随机的SIGTRAP信号。如果我注释掉与该内存管理器相关的每一行,则一切运行正常。获得SIGTRAP-s而不是SIGSEGV是很奇怪的。
我知道当程序到达断点时会抛出SIGTRAP-,但是没有设置断点。我在另一个线程中读到,调试exe和dll的版本必须是最新的。他们是最新的,所以这不是原因。

有人知道为什么会这样吗?

最佳答案

在Google上搜索后,我意识到这些信号带与您在MSVC++中得到的警告相同:“Windows在xxxx.exe中触发了一个断点。这可能是由于堆的损坏,并指出了错误等等”。

所以看来是的,意外的信号提示可能表明内存损坏(非常奇怪...)

而且我也发现了我的错误。 MM位于链接到dll的静态库中。那个静态库和dll链接到我的exe。因此,有两个内存管理器,一个在我的exe中,一个在我的dll中。如果调用MM的初始化方法。它在我的exe中初始化了MM,但没有在dll中初始化它,因此dll没有初始化。我通过不将exe与该静态库链接来解决了这个问题。

关于c++ - 获取随机SIGTRAP信号(在MinGW-gdb中)是否表示内存损坏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2307621/

10-10 09:23
查看更多