Valgrind 是否存在任何已知的误报?我得到“条件跳转或移动取决于未初始化的值”fmemopen
函数,用C编写并用GCC编译。我能确定这是真的吗?
编辑:是否存在抑制文件中未包含的已知问题?是否有人可以在程序中做一些事情,这些事情并不是真正的错误,但 Valgrind 会说它们是错误?如果存在已知问题,最好提供一个列表。
是的,Valgrind 存在误报,这就是为什么它有针对特定 glibc 和 gcc 版本的抑制文件的原因。如果您将较旧的 valgrind 与较新的 gcc 和 glibc 一起使用,即 valgrind 3.3 与 glibc 2.9 一起使用,则可能会出现误报。
话虽如此,您仍然需要调查问题并查明它是否真的是误报(如果事实确实如此,您可以自己编写抑制措施)或者它是否是程序中的真正错误。
没有快速简单的方法来说明这里发生了什么,但在这种情况下,我怀疑您正在将未初始化的值从代码传递到库代码。尝试 Valgrind 选项--track-origins=yes
。它将显示未初始化值的来源。如果这是您的代码,也许您应该初始化它。如果它在库内部,则可能是误报,或者库调用参数的错误值仍然可能导致它,因此请检查这些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)