Cosa provoca errori come i “fatal exception error”?
Quando un programma come Microsoft Word o Excel “va in crash”, significa che durante l’esecuzione è successo qualcosa di serio. In genere il sistema operativo se ne accorge, termina l’applicazione incriminata nel modo più pulito possibile e mostra un messaggio criptico del tipo “fatal exception error” (spesso accompagnato da lunghe sequenze di numeri esadecimali: inutili per l’utente, ma potenzialmente utili agli sviluppatori). In altri casi, l’errore manda in blocco anche il sistema operativo, costringendoti a riavviare il computer.
Anche se quei messaggi sembrano incomprensibili, può essere utile sapere che cosa indicano. Ecco i tre casi più comuni.
Fatal exception error
- Un’applicazione complessa come Microsoft Word è costruita su più strati: il nucleo del sistema operativo, i suoi servizi, eventuali layer di astrazione, centinaia di librerie software, librerie interne di funzioni o classi e DLL, fino ad arrivare al livello dell’app principale.
- Molti sistemi operativi e linguaggi moderni (come C++ e Java) usano il meccanismo delle “eccezioni” e della relativa “gestione delle eccezioni”. Le eccezioni servono a segnalare problemi da uno strato all’altro.
- Esempio: il programma chiede memoria al sistema operativo. Se la richiesta non può essere soddisfatta (perché la memoria è insufficiente, il blocco è troppo grande, ecc.), il sistema “lancia un’eccezione di memoria” verso il livello che ha fatto la richiesta. L’eccezione può “risalire” diversi strati finché uno non la intercetta e gestisce il problema.
- Una buona gestione prevede di “catturare” l’eccezione e informare l’utente in modo adeguato (ad esempio con una finestra di dialogo).
- Se nessun livello intercetta l’eccezione (perché il codice non gestisce quel caso), l’errore arriva in cima allo stack e il sistema operativo lo classifica come “eccezione non gestita”, terminando il programma. Il software ben progettato intercetta e gestisce sistematicamente tutte le eccezioni previste.
Invalid page fault (o segmentation fault)
- I programmi usano la RAM per conservare dati temporanei. Se apri un documento in Word, porzioni del file occupano memoria.
- Quando il programma necessita di memoria, chiede al sistema blocchi di dimensioni specifiche e ne conserva l’indirizzo tramite un “puntatore”.
- Se il programma prova a scrivere oltre il limite di un blocco assegnato, oppure tenta di accedere a un’area inesistente o non consentita con un puntatore invalido, il sistema operativo rileva l’anomalia e genera un “page fault” o “segmentation fault”.
- In questa situazione il sistema chiude l’applicazione, perché il comportamento indica che il programma sta usando la memoria in modo errato o pericoloso.
Illegal operation (istruzione illegale)
- Un microprocessore comprende un insieme finito di istruzioni, ognuna identificata da un codice numerico (opcode). Per esempio, un opcode può significare “somma”, un altro “moltiplica”.
- Se durante l’esecuzione il processore incontra un opcode che non riconosce, o che non può eseguire nello stato corrente, interrompe l’esecuzione e segnala l’errore.
- Il sistema operativo, a sua volta, termina il programma responsabile.
- In genere le istruzioni illegali derivano da salti di esecuzione verso aree di memoria che non contengono codice valido (per esempio a causa di un puntatore corrotto o di uno stack compromesso).
Perché succedono questi errori?
In ultima analisi, si tratta di errori umani nel software. Un programmatore può dimenticare di gestire un’eccezione, oppure consentire per sbaglio accessi a memoria non valida. A volte il problema nasce da inesperienza; altre, dalla pura complessità dei programmi moderni:
- Esistono centinaia di tipi di eccezioni possibili.
- Un’applicazione può gestire milioni di blocchi di memoria in un ambiente a strati molto articolato.
- Basta un singolo errore per far crollare tutto: il software è “fragile” per natura.
I test intercettano molti bug, ma raramente li eliminano tutti. Per questo, ogni tanto, capitano “fatal exception”, “page fault” o “illegal operation” anche in applicazioni molto diffuse.

