7

valgrindでセグメンテーション違反を追跡しようとしています。valgrindから次のメッセージが表示されます。

==3683== Conditional jump or move depends on uninitialised value(s)
==3683==    at 0x4C277C5: sparse_mat_mat_kron (sparse.c:165)
==3683==    by 0x4C2706E: rec_mating (rec.c:176)
==3683==    by 0x401C1C: age_dep_iterate (age_dep.c:287)
==3683==    by 0x4014CB: main (age_dep.c:92)
==3683==  Uninitialised value was created by a stack allocation
==3683==    at 0x401848: age_dep_init_params (age_dep.c:131)
==3683== 
==3683== Conditional jump or move depends on uninitialised value(s)
==3683==    at 0x4C277C7: sparse_mat_mat_kron (sparse.c:165)
==3683==    by 0x4C2706E: rec_mating (rec.c:176)
==3683==    by 0x401C1C: age_dep_iterate (age_dep.c:287)
==3683==    by 0x4014CB: main (age_dep.c:92)
==3683==  Uninitialised value was created by a stack allocation
==3683==    at 0x401848: age_dep_init_params (age_dep.c:131)

ただし、問題のある行は次のとおりです。

 /* allocate mating table */
  age_dep_data->mtable = malloc (age_dep_data->geno * sizeof (double *));
  if (age_dep_data->mtable == NULL)
    error (ENOMEM, ENOMEM, nullmsg, __LINE__);
  for (int j = 0; j < age_dep_data->geno; j++)
    {      
 131=>     age_dep_data->mtable[j] = calloc (age_dep_data->geno, sizeof (double));
      if (age_dep_data->mtable[j] == NULL)
 error (ENOMEM, ENOMEM, nullmsg, __LINE__);
    }

何が得られますか?mallocまたはcallocへの呼び出しにはヒープスペースが割り当てられていると思いました。ここには他の変数は割り当てられていませんよね?私が見ていない別の割り当て(問題のあるスタック割り当て)が行われている可能性はありますか?

編集:私の現在の疑いは、スタックに割り当てられた配列です:double(stack)へのポインターを宣言し、double*を返す関数の結果をそれに割り当てます。次に、以前に割り当てられた場所に移動します。

memmove、memcpy、またはスタック変数を割り当てることができず、それが持続することを期待できますか?

4

3 に答える 3

2

何が問題なのかわかりませんが

-track-origins=yes 

不平を言っていることについてのより多くの情報を得るのに役立つかもしれません。詳細については、このブログ投稿を参照してください:http: //blog.mozilla.com/nnethercote/2009/02/27/elimination-undefined-values-with-valgrind-the-easy-way/

于 2010-04-21T14:49:40.487 に答える
0

考えられる理由:として
定義age_dep_data->mtableしますが、配列の配列であるdouble* 必要がありますdouble**

于 2010-04-21T14:47:12.653 に答える
-1

それ以来、このvalgrindエラーが見つかりました

Conditional jump or move depends on uninitialised value(s)

常に発生し、エラーの原因ではありません。この質問を投稿してから私が遭遇したほとんどの場合、それは赤いニシンのようです。

于 2010-07-30T17:30:56.490 に答える