malloc в С, освобождение памяти под матрицу

Рейтинг: 1Ответов: 0Опубликовано: 13.06.2023

Есть код. Со структурой 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) происходит заполнение матрицы нулями.

Ответы

Ответов пока нет.