Задать вопрос
  • Парсинг строки не через strtok на СИ. В чем заключается ошибка?

    @newmersedez Автор вопроса
    Здравствуйте еще раз. Почему не работает, если в 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);
    }
    Ответ написан