Динамический 2-размерный массив (malloc, realloc) - C (СИ)
Формулировка задачи:
Здравствуйте,
подскажите, пожалуйста, как мне решить вот эту задачу:
Задание: Пользователь задаёт количество строк матрицы, затем последовательность чисел (пример: 12214554452...). Как мне эти числа (по 1 знаку) занести в матрицу, количество столбцов которой не известно?
Моё решение: Как я понял, то надо сделать аллокацию памяти (для первых m чисел, для которых я резервирую к примеру 100 мест):
По достижении максимального количества чисел в строке матрицы (в данном случае 100) надо память расширить к примеру ещё на 100 мест (и таким способом каждый раз увеличивать array до конца строчки):
В программе задаю:
Количество строк: 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
Подскажите в чём может быть проблема?
Заранее спасибо.
int *a[n]; a = (int**)malloc(n * sizeof(int)); for (i = 0; i < n; i++) { a[i] = (int*)malloc(m * sizeof(int)); }
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-размерный массив (malloc, realloc)»
textual
Листинг программы
a = (int **)realloc(a, new_size*sizeof(int *));
Объяснение кода листинга программы
a
- это динамический массив, который был выделен с помощью функцииmalloc
илиrealloc
.new_size
- это новое количество элементов, которые нужно добавить в массив.sizeof(int *)
- это размер одного элемента массива в байтах.- Функция
realloc
используется для изменения размера массива. a
- это указатель на начало массива.new_size
- это количество элементов, которые нужно добавить в массив.realloc
изменяет размер массива, выделяя новую память и копируя старые данные в новое место.int **
- это тип данных, который указывает на указатель на указатель на int.a
- это указатель на начало массива.new_size
- это количество элементов, которые нужно добавить в массив.int **
- это тип данных, который указывает на указатель на указатель на int.realloc
- это функция, которая изменяет размер массива.a
- это динамический массив, который был выделен с помощью функцииmalloc
илиrealloc
.new_size
- это новое количество элементов, которые нужно добавить в массив.sizeof(int *)
- это размер одного элемента массива в байтах.realloc
изменяет размер массива, выделяя новую память и копируя старые данные в новое место.int **
- это тип данных, который указывает на указатель на указатель на int.a
- это указатель на начало массива.new_size
- это количество элементов, которые нужно добавить в массив.int **
- это тип данных, который указывает на указатель на указатель на int.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д