我正在嘗試用 C 解決以下練習:
“考慮一個函式 dobuleArray(),它接受一個陣列和一個指向其大小的指標,并將陣列加倍作為輸出。創建一個大小為 1 到 4 的陣列作為初始大小。然后,開始用 2048 個隨機生成的整數填充陣列; 每次陣列滿時,呼叫 doubleArray() 函式。每次呼叫 doubleArray() 后,再次列印陣列的內容"
我的初始大小為 3 時遇到問題。我撰寫的程式不適用于大于 4 的數字,我也不知道為什么。準確地說,我得到一個realloc: invalid next size
int* doubleArray(int* vect, int* dim) {
int old_dim = *dim;
int i;
int new_dim = old_dim * 2;
vect = realloc(vect, new_dim * sizeof(int));
for (i = old_dim; i < new_dim; i ) {
vect[i] = 0;
}
*dim = new_dim;
return vect;
}
int main() {
int n = 3;
int* size = &n;
int* arr = malloc(n * sizeof(int));
for (int i = 0; i < 2048; i ) {
if (i > *size) {
int j = 0; // used to count the size of the doubled-array each time the
// if condition is true
arr = doubleArray(arr, size);
for (int i = 0; i < *size; i ) {
j ;
printf("%d ", arr[i]);
}
printf("\n");
printf("%d\n", j);
printf("\n");
arr[i] = rand() % 6;
} else {
arr[i] = rand() % 6;
}
}
}
我認為雙重功能應該可以正常作業。整個程式實際上只適用于這樣的值2048 % value == 0。但我想應該有一種方法可以糾正它以使其適用于 3。
顯然,該程式的輸出如下所示:
1 4 3 0 0 0
6
realloc(): invalid next size
signal: aborted (core dumped)
uj5u.com熱心網友回復:
您寫入陣列的末尾,這會導致未定義的行為。(在這種情況下非常煩人的未定義行為)
if (i > *size) {
應該
if (i >= *size) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335229.html
下一篇:C中“if”陳述句中的分段錯誤
