Non e' uno strano errore ...

Hai allocato un puntatore (data) in questa riga

codice:
if(!(data = calloc(17, sizeof(char)))){
		printf("Error allocing <%p>", data);
		exit(1);
	}
poi ne modifichi il valore con l'istruzione

codice:
++data;
e alla fine tenti di liberare la memoria con

codice:
free(data);
ma il valore di data non è più quello originale ...