ВУЗ:
Составители:
73
DynMatrix alloc_matrix(N int, M int)
{
int i;
DynMatrix m = calloc(sizeof(double*),N);
if(m == NULL)
return NULL;
for(i = 0 ; i < N ; ++i)
if((m[i] = calloc(sizeof(double),M)) == NULL) {
/* неудача: освободить сначала уже то ,
что успели выделить */
for(--i ; i>=0 ; --i)
free(m[i]);
free(m);
return NULL;
}
return m;
}
Мы определили для типа double** синоним DynMatrix
(динамическая матрица). Функция alloc_matrix выделяет память под
матрицу размерности NxM. В случае неудачи возвращается NULL (при
этом освобождается вся лишняя память , которая уже была выделена к
моменту неудачи). В случае успеха возвращается указатель, который
можно индексировать как обычный двумерный массив .
Для освобождения такого массива необходимо сначала освободить
память , занимаемую каждой строкой, а затем уже сам массив указателей :
for(i = 0 ; i < N ; ++i)
free(m[i]);
free(m);
Трех - и более мерные динамические массивы могут быть
реализованы аналогично двумерным , при помощи массивов на указатели
на массивы указателей .
В заключение отметим , что так как строки являются одномерными
массивами типа char, то для работы с динамическими строками можно
73
DynMatrix alloc_matrix(N int, M int)
{
int i;
DynMatrix m = calloc(sizeof(double*),N);
if(m == NULL)
return NULL;
for(i = 0 ; i < N ; ++i)
if((m[i] = calloc(sizeof(double),M)) == NULL) {
/* неудача: освободить сначала уже то,
что успели выделить */
for(--i ; i>=0 ; --i)
free(m[i]);
free(m);
return NULL;
}
return m;
}
Мы определили для типа double** синоним DynMatrix
(динамическая матрица). Функция alloc_matrix выделяет память под
матрицу размерности NxM. В случае неудачи возвращается NULL (при
этом освобождается вся лишняя память, которая уже была выделена к
моменту неудачи). В случае успеха возвращается указатель, который
можно индексировать как обычный двумерный массив.
Для освобождения такого массива необходимо сначала освободить
память, занимаемую каждой строкой, а затем уже сам массив указателей:
for(i = 0 ; i < N ; ++i)
free(m[i]);
free(m);
Трех- и более мерные динамические массивы могут быть
реализованы аналогично двумерным, при помощи массивов на указатели
на массивы указателей.
В заключение отметим, что так как строки являются одномерными
массивами типа char, то для работы с динамическими строками можно
Страницы
- « первая
- ‹ предыдущая
- …
- 71
- 72
- 73
- 74
- 75
- …
- следующая ›
- последняя »
