1

我正在尝试使用 dmalloc 版本 5.5.2 和 glibc 2.17。

dmalloc 中的链接总是会导致段错误。

调试时,我发现 dmalloc 在要格式化有用的调试消息时会调用 vsnprintf(...) 。不幸的是 vsnprintf(..) 本身调用了 free(),所以分段错误的原因是递归。free() 调用 vsnprintf(),vsnprintf() 调用 free() 等等,直到我们用一个巨大的堆栈跟踪进行段错误。

可以通过取消定义 HAVE_VSNPRINTF 和 HAVE_VPRINTF 来快速解决此问题,但是调试消息缺少关键信息。

我已经通过使用不分配内存的古老实现 vsnprintf(...) 破解了我自己的解决方案,但很难相信那里还没有一个好的解决方案。

有没有一种标准的方法可以用 dmalloc 解决这个问题?

4

1 回答 1

2

由于您发现有问题的调用是带有 null 参数的无用调用,因此最简单的解决方法似乎是在'sif (!p) return;的开头添加。dmallocfree

于 2014-08-29T18:23:12.637 回答