Un problema e' certamente in queste linee

codice:
	file_input = (char*)malloc(size * sizeof(char));
	fread(file_input, sizeof(char), size, fp);
	file_input[size] = '\0';//null-termino la stringa
dove allochi lo spazio in un buffer per leggere tutto il contenuto di un file, ma poi scrivi il terminatore null fuori dal buffer (in quanto non era previsto dalla malloc), sporcando chissa' cosa in memoria ...

E in realta', il terminatore non serve a nulla, dato che il buffer non e' una stringa ...

La

codice:
	file_input[size] = '\0';//null-termino la stringa
va quindi eliminata.