嗨,我有这个问题:
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==
有什么问题?谢谢你的帮助。
答案 0 :(得分:2)
假设os
为realloc()
d更大,那么有效添加到int*
的其他os
将是未初始化的指针(由os[i]
访问)。这些单元化指针最终传递到realloc()
循环中的for
:
tmpx = (int*)realloc(os[i],x*sizeof(int));
传递给realloc()
的指针必须是NULL
或malloc()
,realloc()
或calloc()
之前返回的值。在进入int*
循环之前,将其他NULL
设置为for
。请注意,realloc()
的返回值的强制转换是不需要的。