Ho una funzione e dovrei capire il motivo di un dato errore ma non ne riesco a venire a capo, vi posto il codice(si tratta di codice C)
Codice PHP:
void f2(void) {
    
char *a, *b, *c;

    
"ciao";
    if (!(
malloc(sizeof(char) * 10))) {
        return;
    }
    
strcpy(b"prova1");

    
b;
    
a;
    
c;
    
NULL;

    
printf("a = '%s'\nb = '%s'\n"ab);

    
free(b);

So per certo che l'errore avviene nel free(b) a causa dello scambio fra a e b, quello che non capisco è perché? mi limito a scambiare le stringhe a cui puntano, nel momento in cui vado a liberare la memoria puntata da b per quale motivo dovrebbe dare errore?