dmalloc对vsnprintf的假设是否有标准的解决方法?

时间:2014-08-29 16:44:18

标签: c dmalloc

我尝试使用dmalloc 5.5.2和glibc 2.17。

在dmalloc中链接始终会导致段错误。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

由于您发现违规调用是一个无用的调用,因此最简单的解决方法似乎是在if (!p) return;的{​​{1}}开头添加dmalloc