Non capisco molto la logica del tuo programmino (in sostanza che vuoi fare?) ma solitamente succede quando vai fuori memoria (buffer overflow) e poi liberi dello spazio con la free... oppure quando usi la free per spazi non allocati dalla malloc o costanti (ma non mi sembra questo il caso).

Ripercorri per bene il codice e usa un Debugger per far meglio

E' comunque normale che vedi la stringa e tutto perché hai temporaneamente usato una fetta di memoria usata non allocata, ma in C è lecito (ovvio, con queste conseguenze )