C'e' un errore di fondo.
Stai scrivendo dei dati binari in un file in modalita' testo.
Ovviamente, se ad esempio imposti il valore del giorno a 26, questo verra' interpretato come EOF (End Of File) e cosi' altri caratteri di controllo.
Il modo con cui stai serializzando la classe e' sbagliato.
In genere, la classe dovrebbe prevedere un metodo Serialize e un metodo Deserialize (o simili) che gli permettono di scrivere/leggere i dati di una istanza su disco in maniera corretta.
Il fatto che alcune volte tu abbia problemi e altre no, dipende da cosa e' contenuto nelle variabili di una determinata istanza in un determinato momento.
Se decidi di usare la fwrite cosi' come hai fatto fino ad ora (cosa che ti sconsiglio ... perche' se hai dei dati che puntano ad aree di memoria allora stai scrivendo su disco solamente i valori dei puntatori e non i dati, e quando li rileggi, non solo i dati non ci stanno ma neanche i puntatori sono validi) allora devi usare i file con accesso binario. Altrimenti utilizza delle funzioni membro apposite e la scrittura in modalita' testo.

Rispondi quotando