gpt4 book ai didi

条件跳转或移动取决于未初始化的值 2D 数组

转载 作者:行者123 更新时间:2023-11-30 14:22:33 25 4
gpt4 key购买 nike

您好,我遇到了问题:

tmpy = (int**)realloc(os,y*sizeof(int*));
os = tmpy;
tmpy=NULL;
for(i=0;i<y;i++) {
tmpx = (int*)realloc(os[i],x*sizeof(int));
os[i] = tmpx;
tmpx=NULL;
}

程序运行良好,但 valgrind 给出此错误:

==12513== Conditional jump or move depends on uninitialised value(s)
==12513== at 0x402BF0D: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12513== by 0x8048760: main (main.c:55)
==12513== Uninitialised value was created by a heap allocation
==12513== at 0x402BF52: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12513== by 0x804871E: main (main.c:50)
==12513==

出了什么问题?感谢您的帮助。

最佳答案

假设 osrealloc() 调整为更大的大小,则附加的 int* 有效地添加到 os 将是未初始化的指针(通过 os[i] 访问)。这些统一的指针最终会在 for 循环中传递给 realloc():

tmpx = (int*)realloc(os[i],x*sizeof(int));

传递给 realloc() 的指针必须为 NULL 或之前由 malloc()realloc() 返回的值calloc()。在进入 for 循环之前,将附加的 int* 设置为 NULL。请注意,不需要对 realloc() 返回值进行强制转换。

关于条件跳转或移动取决于未初始化的值 2D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674599/

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