Der Inhalt des Speichers mit malloc
(sowie der Variablen auf dem Stack zugeordnet) zugeordnet initialisiert ist undefined, so dass es sehr gut alles sein kann. Normalerweise erhalten Sie Speicherplatz, der mit Nullen gefüllt ist (weil das Betriebssystem Speicherseiten blättert, die von anderen Prozessen verwendet wurden) oder Reste der vorherigen Verwendung dieser Speicherseiten (dies ist häufig der Fall, wenn die Speicherseite zu Ihrem Prozess gehört), aber dies ist was unter der Haube passiert, der C-Standard gibt keine Garantien.
Also, im Allgemeinen gibt es keinen "Standardwert" und keine Möglichkeit zu überprüfen, ob Ihr Speicher geändert wurde; Sie können jedoch die Speicherblöcke initialisieren, die Sie mit magischen Werten verwenden, von denen Sie sicher sind, dass sie nicht als "echte Daten" verwendet werden, aber es handelt sich lediglich um eine interne Konvention für Ihre Anwendung.
Glücklicherweise gibt es für Gleitkommavariablen mehrere magische Werte wie leises NaN, das Sie für diesen Zweck verwenden können; Im Allgemeinen können Sie das in <math.h>
definierte Makro NAN
verwenden, um float
auf NaN zu setzen.
By the way, sollten Sie nicht uninitialized lesen float
s und double
s, da das übliche Format sie in (IEEE 754) enthält einige magische Werte gespeichert werden (wie die Signal-NAN), die arithmetische Ausnahmen auslösen können, wenn sie Lesen Sie, wenn Ihr nicht initialisierter Speicher also ein solches Bitmuster enthält, wird Ihre Anwendung wahrscheinlich abstürzen.
Peoro: wenn es es nicht initialisiert dann was ist das -431602080.000000? dass jeder Block zu haben scheint? – Freddy
Wenn Sie im Debug-Modus ausgeführt werden, sollte dies ein magischer Wert sein, der Ihnen zeigt, dass Sie nicht initialisierte Daten verwenden. –
Es könnte was auch immer sein. Es könnte der Wert sein, den ein Teil des Speichers vor Ihrem Anruf enthielt. – peoro