2014-06-05 105 views
1
int x = 750; 
int i = 0; 

while (pow(2, i) < x) { 
    i++; 
} 
printf("i is currently %d\n", i); 

int array[i]; 

while (i > 0){ 
    i--; 
    printf("The value of array %d is %d\n", i, array[i]); 
} 

當我這樣做時,它創建了一些非常瘋狂的值。我聽說過試圖使用malloc或memset,但值沒有改變。我想要做的就是將所有這些設置爲零,以便我可以將它用作計數器。謝謝!將可變長度數組初始化爲零

+5

什麼,*完全*,做了這個'memset'你試過*看起來像*當值「沒有改變」?郵寄*請*。我的水晶球告訴我你調用了'memset(array,0,i)',你應該調用memset(array,0,i * sizeof(* array));'。 – WhozCraig

+0

嘿,謝謝Craig,那是真的,我甚至沒有意識到。我將需要重做。好吧,我也試過'memset(array,1,i * sizeof(* array));'它顯示所有的值爲16843009 – Farion

+1

你想讓它們爲1還是0?請記住,'memset'設置*八位字節*;不*實體*。將每個*字節*設置爲4個字節整數序列中的每個* 1將給出每個「int」*的0x01010101 *,將其轉換爲小數爲16843009.如果您希望它們全部初始爲1,則需要通過硬循環。 'for(int j = 0; j WhozCraig

回答

1

您沒有初始化您的數組值。它的內容是垃圾:您的printf中的array[i]的值未定義 - 可能是任何內容。

要初始化數組爲0,你可以使用memset(由@WhozCraig評論,memset在陣列的所有字節設置爲給定值):

memset (array, 0, sizeof(array)); 

爲了寫別的東西,寫for循環:

int n = 0; 
for(; n < i ; ++n) 
    array[n] = n; 
+0

爲了完整起見,初始化爲0,'int array [i] = {0};'爲簡潔起見無可匹敵。 –

+1

@Pascal,OP陣列動態調整大小。 「錯誤:可變大小的對象可能未被初始化」 – quantdev