当我将项目与库的静态版本链接时,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 /...)
这个错误应该被忽略还是可以以某种方式解决?
答案 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