静态库中的“条件跳转或移动取决于未初始化的值”

时间:2013-09-13 17:11:03

标签: c++ static-libraries valgrind

当我将项目与库的静态版本链接时,VALGRIND开始报告错误编号为"条件跳转或移动取决于未初始化的值"错误。问题是项目本身不包含除空主函数之外的任何内容,因此问题肯定存在于库中。

库的共享和静态二进制文件是单独编译的,当库被链接为共享库时,VALGRIND不会报告任何内容。

==4691== Conditional jump or move depends on uninitialised value(s)
==4691==    at 0x8108A88: __linkin_atfork (in /...)
==4691==    by 0x80F60CC: ptmalloc_init (in /...)
==4691==    by 0x80FA075: malloc_hook_ini (in /...)
==4691==    by 0x80F9FB8: malloc (in /...)
==4691==    by 0x812C9EB: _dl_init_paths (in /...)
==4691==    by 0x81093AF: _dl_non_dynamic_init (in /...)
==4691==    by 0x8109E5E: __libc_init_first (in /...)
==4691==    by 0x80DC90D: (below main) (in /...)
==4691==  Uninitialised value was created
==4691==    at 0x812A68E: brk (in /...)
==4691==    by 0x81065AC: sbrk (in /...)
==4691==    by 0x80DCC88: __libc_setup_tls (in /...)
==4691==    by 0x80DCE39: __pthread_initialize_minimal (in /...)
==4691==    by 0x80DC8AA: (below main) (in /...)

这个错误应该被忽略还是可以以某种方式解决?

2 个答案:

答案 0 :(得分:0)

如果你调用calloc而不是调用malloc怎么办?

您可能正在访问在malloc'ed之后但在将数据分配给它之前指向它的数据。

调用calloc而不是malloc将隐藏问题,但它不会解决你遇到的问题。确保在引用数据之前分配数据。

答案 1 :(得分:0)

在我看来,你应该忽略错误(除非你将奇怪的库附加到空程序中)。如果按如下方式运行Valgrind,则可以禁止它们:

    valgrind --gen-suppressions=yes ./program

然后,将其剪切并粘贴到抑制文件中。

在此处阅读更多内容:http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress