Как выделить динамическую память для матрицы? - C (СИ)
Формулировка задачи:
Как выделить динамическую память для матрицы?
Решение задачи: «Как выделить динамическую память для матрицы?»
textual
Листинг программы
int n = ...; // число строк
int m = ...; // число столбцов
int **matrix = malloc(n*sizeof(int*));
matrix[0] = malloc(m*n*sizeof(int));
for (int i=1; i < n; ++i) {
matrix[i] = matrix[0] + m*i;
}
// .....
free(matrix[0]);
free(matrix);
Объяснение кода листинга программы
В данном коде выделяется динамическая память для матрицы.
- Сначала объявляются две переменные:
n- количество строк в матрице.m- количество столбцов в матрице.
- Затем с помощью функции
mallocвыделяется память подnуказателей наint. - Далее с помощью функции
mallocвыделяется память под массивmэлементов типаint, который будет использоваться как первая строка матрицы. - В цикле
forначиная со строки 1 и доn-1включительно, мы присваиваем каждому указателю на строку матрицы адрес начала следующей строки массива. Таким образом, каждая строка матрицы будет указана на свой массив в памяти. - После использования матрицы, память освобождается с помощью функции
freeсначала для первого указателя, а затем для всех указателей на строки матрицы.