3

当我将我的项目与库的静态版本链接时,VALGRIND 开始报告错误编号“条件跳转或移动取决于未初始化的值”错误。项目本身除了空的 main 函数之外不包含任何东西的问题,所以问题肯定出在库中。

库的共享和静态二进制文件是分开编译的,当库链接为共享时,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 /...)

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

4

2 回答 2

0

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

    valgrind --gen-suppressions=yes ./program

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

在这里阅读更多:http: //valgrind.org/docs/manual/manual-core.html#manual-core.suppress

于 2013-10-18T11:30:51.190 回答
0

如果你调用 calloc 而不是调用 malloc 会怎样?

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

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

于 2013-10-18T10:39:11.667 回答