Nicht initialisierte Variablen machen ein Programm nicht deterministisch. Jedes Mal, wenn das Programm ausgeführt wird, kann es sich anders verhalten. Unabhängige Änderungen der Betriebsumgebung, der Tageszeit, der Mondphase und deren Permutationen beeinflussen, wie und wann sich diese Dämonen manifestieren. Das Programm kann eine Million Mal ausgeführt werden, bevor der Fehler auftritt, sie können es jedes Mal tun oder eine weitere Million ausführen. Viele Probleme werden auf "Pannen" zurückgeführt und ignoriert oder Fehlerberichte von Kunden, die als "nicht reproduzierbar" geschlossen wurden. Wie oft haben Sie einen Computer neu gestartet, um ein Problem zu beheben? Wie oft haben Sie zu einem Kunden gesagt: "Noch nie gesehen, lassen Sie es mich wissen, wenn Sie es wieder sehen" - in der Hoffnung, dass sie es nicht tun!
Da die Reproduktion eines Defekts in der Testumgebung nahezu unmöglich sein kann, ist es nahezu unmöglich, ihn zu finden und zu beheben.
Es kann Jahre dauern, bis der Fehler auftritt. Dies gilt häufig für Code, der als zuverlässig und stabil angesehen wird. Es wird vermutet, dass der Fehler in neuerem Code vorliegt - das Aufspüren kann erheblich länger dauern. Eine Änderung des Compilers, ein Compilerwechsel oder sogar das Hinzufügen einer Codezeile können das Verhalten ändern.
Das Initialisieren von Variablen hat einen enormen Leistungsvorteil, nicht nur, weil ein Programm, das korrekt funktioniert, unendlich schneller ist als eines, das nicht funktioniert, sondern die Entwickler weniger Zeit damit verbringen, Fehler zu finden und zu beheben, die nicht vorhanden sein sollten, und mehr Zeit damit, "echte" Arbeit zu leisten.
Der andere wesentliche Vorteil der Initialisierung von Variablen besteht darin, dass der ursprüngliche Autor des Codes entscheiden muss, auf welche Weise sie initialisiert werden sollen. Dies ist nicht immer eine triviale Übung und kann, wenn sie nicht trivial ist, ein Hinweis auf ein schlechtes Design sein.
Speicherlecks sind ein anderes Problem, aber eine ordnungsgemäße Initialisierung kann nicht nur dazu beitragen, sie zu verhindern, sondern auch dazu, sie zu erkennen und die Quelle zu finden - sie ist stark sprachabhängig und das ist wirklich eine separate Frage, die weiter untersucht werden sollte, als ich geben kann in dieser Antwort.
Bearbeiten: In einigen Sprachen (z. B. C #) ist es nicht möglich, nicht initialisierte Variablen zu verwenden, da das Programm nicht kompiliert oder bei Ausführung einen Fehler meldet, wenn dies erledigt ist. Viele Sprachen mit diesen Merkmalen verfügen jedoch über Schnittstellen zu möglicherweise unsicherem Code. Daher muss bei der Verwendung solcher Schnittstellen darauf geachtet werden, keine nicht initialisierten Variablen einzuführen.