3

プロジェクトを静的バージョンのライブラリにリンクすると、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 /...)

このエラーは無視する必要がありますか、それとも何らかの方法で解決できますか?

4

2 に答える 2

0

malloc を呼び出す代わりに calloc を呼び出すとどうなりますか?

mallocされた後、データが割り当てられる前に、それを指すデータにアクセスしている可能性があります。

malloc の代わりに calloc を呼び出すと問題は隠されますが、問題は解決しません。データを参照する前に、必ずデータを割り当ててください。

于 2013-10-18T10:39:11.667 に答える
0

無視すべきエラーのように見えます (空のプログラムに奇妙なライブラリをアタッチしている場合を除きます)。次のように Valgrind を実行すると、それらを抑制することができます。

    valgrind --gen-suppressions=yes ./program

次に、それを切り取り、抑制ファイルに貼り付けます。

詳細はこちら: http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress

于 2013-10-18T11:30:51.190 に答える