Değerli bir segfault izlemeye çalışıyorum. Ben valgrind gelen şu mesajı alıyorum: Ne verirValgrind "yığın ayırma" diyor "yığın ayırma" diyorum
/* 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__);
}
:
Ancak==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)
, burada kusurlu bir hat? Malloc veya calloc ayrılmış yığın alanına herhangi bir çağrı düşündüm; Burada ayrılan başka bir değişken yok, değil mi? Göremediğim başka bir tahsisat var mı (sorunlu yığın tahsisi) mümkün mü?
DÜZENLEME: Şu andaki şüphem yığılmış olarak ayrılmış bir dizidir: Bir işaretçiyi çift (yığın) olarak bildirir ve sonra çift * döndüren bir işlevin sonucunu atar. Sonra onu daha önce tahsis edilmiş bir yere yapıştırıyorum.
Bir yığın değişkenini hatırlayamıyorum, memcpy veya atama değişkenini atamam, sonra da devam edeceğini umarım, yapabilir miyim?
Daha fazla kod görebilir miyiz? Belki age_dep.c – eyalm