我已經爲嵌入式系統編寫了一段相當大的代碼,其中一個函數用於計算循環中的calloc結構併爲其賦值。我遇到了代碼中的一個錯誤,它花了我一些時間來分離和修復。如果有需要,我希望看到別人能否在分享我的經驗之前指出錯誤。循環中的存儲器初始化:空閒時出現分段錯誤
聲明塊:
int *arr;
int i, num;
printf("Enter number of elements: ");
scanf("%d", &num); //Assume num>=0
arr = calloc(num, sizeof(int));
if (arr == NULL)
return;
i = num;
這下面的代碼塊/塊將拋出調用free()例外,爲什麼?
for (i; i > 0; i--) {
arr[num - i] = i;
}
free(arr);
OR
while (i--) {
arr[num - i] = i;
}
free(arr);
而第二個會以類似的方式崩潰:當'i == 1'在循環的頂部時,'while'條件將成功並且也將'i'變爲0;那麼循環體將再次嘗試寫入'arr [num - 0]'。 –
你的循環看起來很好。你能發佈一個崩潰的完整例子嗎? (ideone,鍵盤,無論你喜歡,還是隻是在這裏) –
@j_random_hacker:這也是我最初的想法,但循環沒關係。 – acjay