2012-12-02 25 views
0

您好我有这样的问题:条件跳转或移动依赖于未初始化的值(一个或多个)二维数组

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== 

有什么不对?感谢您的帮助。

回答

2

假设os正在realloc() d到更大尺寸,则附加int*有效地添加到os将(由os[i]访问)未初始化指针。这些unitialised指针最终传递到realloc()for循环中:

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

传递给realloc()指针必须是NULL或值的先前由malloc()realloc()calloc()返回。在输入for循环之前,将额外的int*设置为NULL。请注意,realloc()的退货价值是不需要的。

相关问题