La causa dell'errore è subdola ...

Il fatto è che la malloc prevede lo spazio per 2 elementi ma il ciclo seguente legge oltre il secondo item in memoria.

In questo modo la memoria viene corrotta e la free manifesta solamente il problema.