Ребята это я виновата, Вас всех запутала.
Понятно, что в примере выделено меньше, чем освобождается, и надо делать проверку на нул.
Меня интересесовал другой вопрос.
Создание массива должно проходить так:
Код
int num = 3;
SProba *dat = (SProba*) malloc(sizeof(SProba) * num);
Обращение к элементу можно или так делать:
Код
SProba *elem = &dat[1];
elem->Debug = 123;
//или так:
dat[1].Debug = 123;
А освобождение:
Код
free(dat)
А по части Oerr я просто хотела спросить, что разницы не будет, что я динамически выделяю память на структуру, в которой есть указатель на другую переменную, под которую я также выделю память.
И соотвественно, если я в SProba, к примеру у dat[0], выделила память под Oerr, я ее должна в конце и освободить free(dat[0]->Oerr), а потом уже освободить free(dat). Ну а где не юзаю Oerr, просто у остальных элементов Oerr = NULL...