malloc в С, освобождение памяти под матрицу
Есть код. Со структурой matix_t которая хранит в себе значения матрицы и количество столбцов и строк. В функции create_matrix выполняется динамическое выделение памяти под эту структуры. Не могу разобрать эти строчки пошагово как они работают:
double **matrix =
malloc(sizeof(double) * rows * columns + sizeof(double *) * rows);
for (int row = 0; row < rows; ++row)
*(matrix + row) =
(double *)((double **)((double *)matrix + row * columns) + rows);
Сама структура и функция целиком:
typedef struct matrix_struct {
double** matrix;
int rows;
int columns;
} matrix_t;
int create_matrix(int rows, int columns, matrix_t *result){
double **matrix =
malloc(sizeof(double) * rows * columns/* + sizeof(double *) * rows*/);
for (int row = 0; row < rows; ++row)
*(matrix + row) =
(double *)((double **)((double *)matrix + row * columns) + rows);
result->matrix = matrix;
result->rows = rows;
result->columns = columns;
initialize_matrix(result, 0.0);
}
В initialize_matrix(result, 0.0)
происходит заполнение матрицы нулями.
Источник: Stack Overflow на русском