我正在尝试使用dmalloc版本5.5.2和glibc 2.17。
dmalloc中的链接总是会导致分段错误。
调试时,我发现dmalloc调用vsnprintf(.)当它想格式化有帮助的调试消息时。不幸的是vsnprintf(..)它本身调用free(),因此分割错误的原因是递归。free()调用vsnprintf(),vsnprintf()调用free()等,直到我们用一个巨大的堆栈跟踪来分割错误。
人们可以通过取消定义HAVE_VSNPRINTF和HAVE_VPRINTF来快速修复这个问题,但是调试消息却丢失了关键信息。
我使用了一个古老的vsnprintf(.)实现来解决这个问题。这不分配内存,但很难相信还没有一个好的解决方案。
有什么标准的方法可以用dmalloc解决这个问题?
发布于 2014-08-29 18:23:12
由于您已经发现这个错误的调用是一个无用的空参数,所以最简单的解决方法似乎是在dmalloc的free开头添加free。
https://stackoverflow.com/questions/25572635
复制相似问题