gpt4 book ai didi

c - Valgrind 说 "stack allocation,"我说 "heap allocation"

转载 作者:太空狗 更新时间:2023-10-29 17:13:46 24 4
gpt4 key购买 nike

我正在尝试使用 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 (堆栈)的指针,然后将返回 double * 的函数的结果分配给它。然后我将它移动到以前分配的位置。

我不能 memmove、memcpy 或分配一个堆栈变量然后希望它会持续存在,可以吗?

最佳答案

我不知道是什么问题,但是

-track-origins=yes 

可能会帮助您了解有关它所提示的内容的更多信息;有关详细信息,请参阅此博客文章: http://blog.mozilla.com/nnethercote/2009/02/27/eliminating-undefined-values-with-valgrind-the-easy-way/

关于c - Valgrind 说 "stack allocation,"我说 "heap allocation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2683801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com