car livre *: tamanho inválido seguinte (rápido)

Estou liberando um char * após um processo de concatenação.
Mas recebo este erro:

free (): próximo tamanho inválido (rápido): 0x0000000001b86170

Abaixo está o meu código:

void concat(stringList *list) { char *res = (char*)malloc(sizeof(char*)); strcpy(res, list->head->string); list->tmp = list->head->next; while (list->tmp != NULL) { strcat(res, ","); strcat(res, list->tmp->string); list->tmp = list->tmp->next; } printf("%s\n", res); free(res); } 

Seu código está errado.

Você está alocando espaço para um único ponteiro ( malloc(sizeof(char*)) ), mas nenhum caractere. Você está sobrescrevendo seu espaço alocado com todas as strings, causando um comportamento indefinido (neste caso particular, corrompendo os dados de manutenção do malloc() ).

Você não precisa alocar espaço para o ponteiro ( res ), é uma variável local. Você deve alocar espaço para todos os caracteres que você deseja armazenar no endereço mantido pelo ponteiro.

Como você estará percorrendo uma lista para encontrar strings para concatenar, não é possível saber o tamanho total antecipadamente. Você terá que fazer duas passagens pela lista: uma para sumr o strlen() de cada string , então alocar o espaço mais para o separador e o terminador, depois outra passagem quando você realmente fizer a concatenação.