簡體   English   中英

將數組指針傳遞給函數,然后重新分配數組並在 C 中更改其值

[英]Passing an array pointer to a function and then reallocating the array and changing its values in C

我有一個非常基本的問題,我試圖回答它好幾個小時,但它仍然不起作用。 我想在 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 的無效寫入

*array[0] = 1; []運算符具有最高優先級,這意味着它被解釋為首先對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;
}

對於多維,請查看正確分配多維數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM