我有一個非常基本的問題,我試圖回答它好幾個小時,但它仍然不起作用。我想在 main 中分配一個陣列,將它傳遞給另一個函式,重新分配它,然后更改它的值。為什么以下代碼有效:
void fun(int **array, int *size) {
*array = (int *) realloc(*array, *size * sizeof(int));
*array[0] = 1;
return;
}
int main() {
int size = 5;
int *array = (int *) malloc(2 * sizeof(int));
fun(&array, &size);
return 0;
}
...但是一旦我嘗試像這樣更改陣列[1]:
void fun(int **array, int *size) {
*array = (int *) realloc(*array, *size * sizeof(int));
*array[0] = 1;
*array[1] = 2;
return;
}
int main() {
int size = 5;
int *array = (int *) malloc(2 * sizeof(int));
fun(&array, &size);
return 0;
}
......它不再起作用了。它給了我分段錯誤和大小為 4 的無效寫入。
uj5u.com熱心網友回復:
在 中*array[0] = 1;,[]運算子具有最高優先級,這意味著它被解釋為首先對 a 進行指標運算int**,然后取消對它的參考。這相當于**(array 0) = 1哪個不是你想要的。
對于單維陣列,您可以簡單地執行以下操作:
#include <stdlib.h>
void fun (int** array, int size)
{
int* tmp = realloc( *array, sizeof(int[size]) );
if(tmp == NULL)
{
// error handling here
}
*array = tmp;
(*array)[0]=1;
(*array)[1]=2;
}
int main (void)
{
int* array = malloc(2*sizeof *array);
int size = 5;
fun(&array, size);
free(array);
return 0;
}
對于多維,請查看正確分配多維陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330952.html
