Парсинг строки не через strtok на СИ. В чем заключается ошибка?
sizeof(char)
Всегда равен 1 согласно стандарту, сэкономь нам и себе время.

 while(isdigit(string[j]) || isalpha(string[j]))
            {
                buf = (char *)realloc(buf, ++k * sizeof(char));
                buf[k - 1] = string[j];
                j++;
            }
После этого цикла buf не закрыт 0-терминатором, работать с ним как со строкой нельзя.

parsed_string[size - 1] = (char *)malloc(strlen(buf) * sizeof(char));
strcpy(parsed_string[size - 1], buf);
Переполнение буфера, потому что strcpy копирует strlen(buf) символов строки + 1 нулевой байт.
Здравствуйте еще раз. Почему не работает, если в 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);
}