Динамический 2-размерный массив (malloc, realloc) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, подскажите, пожалуйста, как мне решить вот эту задачу: Задание: Пользователь задаёт количество строк матрицы, затем последовательность чисел (пример: 12214554452...). Как мне эти числа (по 1 знаку) занести в матрицу, количество столбцов которой не известно? Моё решение: Как я понял, то надо сделать аллокацию памяти (для первых m чисел, для которых я резервирую к примеру 100 мест):
int *a[n];
a = (int**)malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
  a[i] = (int*)malloc(m * sizeof(int));
}
По достижении максимального количества чисел в строке матрицы (в данном случае 100) надо память расширить к примеру ещё на 100 мест (и таким способом каждый раз увеличивать array до конца строчки):
i = 0;
while (i < n) {
  j = 0;
  rd = 0;
  while (rd == 0) {
    c = getchar();
    if (c != '\n') { /* konec stroki? */
      a[i][j] = c; 
      j++;
      if (j == (m - 1)) { 
        a[i] = (int *)realloc(a[i], (m + 100)*sizeof(int));
        m = m + 100;
      }
    }
    else {
      m = j;
      i++;
      rd = 1;
      m = 0;       
    }
  }
}
В программе задаю: Количество строк: 2 Заполняю матрицу: 123456789123 321987654321 И printf("%c ", a[i][j]) мне рисует: 6 5 4 3 2 1 7 8 9 1 2 3 3 2 1 9 8 7 6 5 4 3 2 1 Подскажите в чём может быть проблема? Заранее спасибо.

Решение задачи: «Динамический 2-размерный массив (malloc, realloc)»

textual
Листинг программы
a = (int **)realloc(a, new_size*sizeof(int *));

Объяснение кода листинга программы

  1. a - это динамический массив, который был выделен с помощью функции malloc или realloc.
  2. new_size - это новое количество элементов, которые нужно добавить в массив.
  3. sizeof(int *) - это размер одного элемента массива в байтах.
  4. Функция realloc используется для изменения размера массива.
  5. a - это указатель на начало массива.
  6. new_size - это количество элементов, которые нужно добавить в массив.
  7. realloc изменяет размер массива, выделяя новую память и копируя старые данные в новое место.
  8. int ** - это тип данных, который указывает на указатель на указатель на int.
  9. a - это указатель на начало массива.
  10. new_size - это количество элементов, которые нужно добавить в массив.
  11. int ** - это тип данных, который указывает на указатель на указатель на int.
  12. realloc - это функция, которая изменяет размер массива.
  13. a - это динамический массив, который был выделен с помощью функции malloc или realloc.
  14. new_size - это новое количество элементов, которые нужно добавить в массив.
  15. sizeof(int *) - это размер одного элемента массива в байтах.
  16. realloc изменяет размер массива, выделяя новую память и копируя старые данные в новое место.
  17. int ** - это тип данных, который указывает на указатель на указатель на int.
  18. a - это указатель на начало массива.
  19. new_size - это количество элементов, которые нужно добавить в массив.
  20. int ** - это тип данных, который указывает на указатель на указатель на int.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы