Есть структура:
struct _xStringList
{
char ***list;
int size;
/*<private>*/
int al;
};
В ней хранится список строк.
Есть 3 функции для создания нового списка, добавления строк и удаления всего списка.
При запуске программы, где используются данные функции вне VS всё нормально, при запуске в VS
появляется ошибка в *_x_string_list_free. Что может быть за причина?
xStringList *_x_string_list_new(void)
{
xStringList *lst = (xStringList *)x_malloc(sizeof(xStringList));
lst->list = (char ***)x_malloc(sizeof(char **) * 255);
lst->al = 255;
lst->size = 0;
return lst;
}
void x_string_list_add(xStringList *lst, int count, ...)
{
char ***tmp;
int i;
P1:
if (lst != NULL)
{
P2:
if (lst->al > lst->size)
{
int i;
va_list par;
lst->list[lst->size] = (char **)x_malloc(sizeof(char *) * count);
va_start(par, count);
for (i = 0; i < count; i++)
{
lst->list[lst->size][i] = x_strdup(va_arg(par, char *));
}
lst->list[lst->size++][i] = NULL;
va_end(par);
}
else
{
tmp = lst->list;
lst->list = (char ***)x_malloc(sizeof(char **)*(lst->al*=2));
for (i = 0; i < lst->size; i++) lst->list[i] = tmp[i];
x_free(tmp);
goto P2;
}
}
else
{
lst = x_string_list_new();
goto P1;
}
}
xStringList *_x_string_list_free(xStringList *lst)
{
int i, j;
if (lst != NULL)
{
for (i = 0; i < lst->size; i++)
{
for (j = 0; lst->list[i][j] != NULL; j++)
{
x_free(lst->list[i][j]);
}
x_free(lst->list[i]); /* Здесь ошибка!
}
x_free(lst->list);
x_free(lst);
}
return NULL;
}