获取随机SIGTRAP信号(在MinGW-gdb中)是内存损坏的标志?

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

有谁知道为什么会发生这种情况?

Solutions Collecting From Web of "获取随机SIGTRAP信号(在MinGW-gdb中)是内存损坏的标志?"

在Google上搜索之后,我意识到这些sigtraps和你在MSVC ++中得到的警告是一样的:“Windows在xxxx.exe中触发了一个断点,这可能是由于堆损坏了,并且指出了一个bug blahblahblah”…

所以似乎是的,意想不到的sigtraps可以表明内存腐蚀(很奇怪…)

我也发现了我的错误。 MM是在一个静态库,它是链接到一个DLL。 而这个静态库和DLL是链接到我的EXE。 所以有两个内存管理器,一个在我的exe和一个在我的dll。 如果调用MM的初始化方法。 它初始化我的exe中的MM,但不是在DLL中,所以DLL没有初始化。 我解决了这个问题,不把我的exe与静态库链接起来。

我猜猜你可能会调用不匹配的新的/删除或malloc /免费的实现 – 因此,你的内存管理器分配的东西,但是当内存被释放,你最终的默认删除/免费的实现。

在信号上设置一个断点,看堆栈上是否有free()或operator delete,以及这是否是你期望的那个函数的实现。