Я работаю над парсером конфигурации INI-стиля для некоторого проекта, и у меня возникает следующая проблема. У меня есть 3 структуры:Выделение памяти для структуры внутри структуры в цикле
typedef struct {
const char* name;
unsigned tract;
int channel;
const char* imitation_type;
} module_config;
typedef struct {
int channel_number;
int isWorking;
int frequency;
int moduleCount;
} channel_config;
typedef struct {
int mode;
module_config* module;
channel_config* channel;
} settings;
И у меня есть функции для обработки данных в моем INI-файл (я работаю под inih анализатора): [вставить в pastebin причину слишком долго]. Наконец, в main() я сделал следующее:
settings* main_settings;
main_settings = (settings*)malloc(sizeof(settings));
main_settings->module = (module_config*)malloc(sizeof(module_config));
main_settings->channel = (channel_config*)malloc(sizeof(channel_config));
if (ini_parse("test.ini", handler, &main_settings) < 0) {
printf("Can't load 'test.ini'\n");
return 1;
}
В результате бинарные аварии с ошибкой памяти. Я думаю (нет, я знаю), что я неправильно распределяю память в обработчике(), но я не понимаю, где я делаю это неправильно. Я всю ночь пытался понять выделение памяти, и я очень устал, но теперь я просто интересно, что я делаю неправильно, и КАК заставить это работать нормально. P.S. Извините за уродливой английский
Почему бы не просто хранить два структур внутри третьего, без указателей? Косвенное указание указателя кажется ненужным. –
помечен как «непонятный, что вы просите». – Barracuda
@JohnZwinck выдает модули и количество каналов может быть любым. Поэтому я также динамически выделяю память на модуль и канал в главном –