Le variabili non inizializzate rendono un programma non deterministico. Ogni volta che il programma viene eseguito, potrebbe comportarsi diversamente. Cambiamenti non correlati all'ambiente operativo, all'ora del giorno, alla fase della luna e alle permutazioni di tali effetti influenzano come e quando questi demoni si manifestano. Il programma può essere eseguito un milione di volte prima che si presenti il difetto, possono farlo ogni volta o eseguire un altro milione. Molti problemi sono ricondotti a "anomalie" e ignorati, o segnalazioni di difetti da parte di clienti chiusi come "Non riproducibili". Con quale frequenza hai riavviato un computer per "risolvere" un problema? Quante volte hai detto a un cliente "Non l'ho mai visto accadere, fammi sapere se lo vedi di nuovo" - sperando (sapendo) bene che non lo faranno!
Poiché la riproduzione di un difetto può essere quasi impossibile nell'ambiente di prova, è quasi impossibile da trovare e correggere.
Possono volerci anni per far emergere il bug, comunemente nel codice ritenuto affidabile e stabile. Si presume che il difetto sia nel codice più recente: rintracciarlo può richiedere molto più tempo. Una modifica nel compilatore, uno switch del compilatore, anche l'aggiunta di una riga di codice può cambiare il comportamento.
L'inizializzazione delle variabili ha un enorme vantaggio in termini di prestazioni, non solo perché un programma che funziona correttamente è infinitamente più veloce di uno che non lo fa, ma gli sviluppatori impiegano meno tempo a trovare e correggere difetti che non dovrebbero esserci e più tempo a fare un lavoro "reale".
L'altro vantaggio significativo dell'inizializzazione delle variabili è che l'autore originale del codice deve decidere a cosa inizializzarle. Questo non è sempre un esercizio banale e, se non banale, può essere un'indicazione di un design scadente.
Le perdite di memoria sono un problema diverso, ma una corretta inizializzazione può non solo aiutare a prevenirle, ma può anche aiutare a rilevarle e trovare la fonte - è altamente dipendente dalla lingua e questa è davvero una domanda separata degna di ulteriori esplorazioni di quelle che sono in grado di dare in questa risposta.
Modifica: in alcune lingue (ad es. C #) non è possibile utilizzare variabili non inizializzate, poiché il programma non verrà compilato o, se eseguito, verrà segnalato un errore quando eseguito. Tuttavia, molte lingue con queste caratteristiche hanno interfacce per codici potenzialmente non sicuri, quindi bisogna usare cautela quando si usano tali interfacce per introdurre variabili non inizializzate.