Здравствуйте еще раз. Почему не работает, если в else дописать free(buf)? Без него все работает, парсит без ошибок и вылетов
char **parse_string(char string[], int *size)
{
int i;
int j;
int k;
char **parsed_string = NULL;
char *buf = NULL;
*size = 0;
k = 0;
for(i = 0; i < strlen(string); i++)
{
if(isdigit(string[i]) || isalpha(string[i]))
{
j = i;
while(isdigit(string[j]) || isalpha(string[j]))
{
buf = (char *)realloc(buf, ++k * sizeof(char) + 1);
buf[k - 1] = string[j];
j++;
}
buf[k] = '\0';
parsed_string = (char **)realloc(parsed_string, ++(*size) * sizeof(char *));
parsed_string[(*size) - 1] = (char *)malloc(strlen(buf));
strcpy(parsed_string[(*size) - 1], buf);
free(buf);
k = 0;
i = j - 1;
}
else
{
buf = (char *)malloc(2);
buf[0] = string[i];
buf[1] = '\0';
parsed_string = (char **)realloc(parsed_string, ++(*size) * sizeof(char *));
parsed_string[(*size) - 1] = (char *)malloc(strlen(buf));
strcpy(parsed_string[(*size) - 1], buf);
// free(buf);
}
}
for(i = 0; i < *size; i++)
printf("'%s' ", parsed_string[i]);
printf("\n");
return (parsed_string);
}