2012-12-02 23 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()的退貨價值是不需要的。

相關問題