ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »