Как я могу объединить два динамических int-массива в C? - PullRequest
0 голосов
/ 13 января 2019

Моя проблема состоит в том, чтобы объединить два динамически распределенных массива в один из них. Я думаю, в принципе из логики это должно работать ...

Я полагаю, что realloc(...) внутри функции неверно. Я также попробовал это вне функции, но это также не работает.

void concatArrays(int *numbers1, int length1, int *numbers2, int length2)
{
  numbers1 = realloc(numbers1, (length1+length2) * sizeof(int));

  int counter = 0;
  for(int i = length1; i<(length1+length2); i++)
  {
    numbers1[i] = numbers2[counter];
    counter++;
  }
}

Теперь в main() я заполняю оба массива и, по крайней мере, хочу распечатать новый, более длинный массив (numbers1).

int main()
{
  int length1 = 5;
  int *numbers1 = malloc(length1 * sizeof(int));

  // fill array1
  . . .

  int length2 = 4;
  int *numbers2 = malloc(length2 *sizeof(int));

  // fill array2
  . . .

  concatArrays(numbers1, length1, numbers2, length2);


  // print out "new" array (numbers1)
  int new_len = length1 + length2;
  for(int i = 0; i<new_len; i++)
  {
    printf("%d ", numbers1[i]);
  }

  free(numbers1);
  free(numbers2);
}

Спасибо за все ваши советы заранее!

1 Ответ

0 голосов
/ 13 января 2019

realloc () возвращает новый указатель (обычно), если новый размер только немного больше и может поместиться в перераспределенный массив. Вы не передаете новый указатель 'numbers1' обратно вызывающей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...