Я работаю над кодом C, который читает в двоичных файлах и организует данные, содержащиеся в этих файлах, в структуру перед обработкой.В своей самой краткой форме основная функция структурирована следующим образом: 1) read_hgf_file 2) process_contents 3) free_allocated_memory
Поскольку данные состоят из записей в разных точках пространства, наиболее удобным является организация данных вструктура с массивами.Я включил определение этой структуры в заголовочный файл «read_hgf.h», который выглядит следующим образом (я использую MSVS 2017):
#pragma once
struct HGF {
int32_t Nrows;
int32_t Ncols;
int32_t Np;
float *data;
float *xcoords;
float *ycoords;
float *zcoords;
};
Первые три поля помогают определить размерпоследние четыреВ моей основной функции я вызываю функцию, которая заполняет эти поля данными из двоичного файла, что прекрасно работает.Теперь я хочу освободить динамически выделенную память, связанную с этой структурой.Поскольку это выглядит беспорядочно, если я освобождаю эти массивы один за другим в основной функции, я хочу обернуть эту функцию в функцию free_hgf ().Правильно ли я понял, что я должен освободить эти поля один за другим, как они объявлены?Будет ли следующий способ правильным, или я нарушаю какие-либо правила C / лучшие практики (особенно связанные с сочетанием операторов * и ->)?
функция:
#include "read_hgf.h"
void free_hgf(struct HGF **hgf) {
free((*hgf)->zcoords);
free((*hgf)->ycoords);
free((*hgf)->xcoords);
free((*hgf)->data);
*hgf = NULL;
}
Вызывается с основного номера следующим образом:
#include "read_hgf.h"
struct HGF hgf;
struct HGF *hgfPtr = &hgf;
free_hgf(&hgfPtr);
Заранее спасибо!