Здравствуйте, dik o-braz, Вы писали:
DOB>DOB>void x_string_list_add(xStringList *lst, int count, ...)
DOB>{
DOB>/* ... */
DOB> if (lst->al > lst->size)
DOB> {
DOB> int i;
DOB> va_list par;
lst->>list[lst->size] = (char **)x_malloc(sizeof(char *) * count);
DOB> va_start(par, count);
DOB> for (i = 0; i < count; i++)
DOB> {
lst->>list[lst->size][i] = x_strdup(va_arg(par, char *));
DOB> }
DOB>/* Зачем нужна вот эта строчка ? VVV */
lst->>list[lst->size++][i] = NULL;
DOB>/* Возможно, ей затирается служебная инф-я хипа */
DOB>/* И в ф-ии free все падает */
DOB> va_end(par);
DOB> }
DOB>/* ... */
DOB>}
DOB>
Именно. Я уже нашёл, но всё равно спасибо. Просто память выделяю для count элементов:
lst->list[lst->size++][i] = NULL;
, а инициализирую count+1 элемент.
Надо писать :
lst->list[lst->size] = (char **)x_malloc(sizeof(char *) * (count+1));
Тема закрыта.