Warum wurde der Speicher, den ich nicht initialisiert habe, auf 0xCC
gesetzt?
Wenn der Speicher auf 0xCC
eingestellt wird, verringert sich die Leistung, daher muss ein Grund dafür gegeben sein, den Speicher mit diesem Byte zu füllen.
Beim Kompilieren eines Debug-Builds Ihres Programms mit Visual Studio und Führen Sie es im Debugger aus, Sie können sehen, dass der zugewiesene Speicher oder Deallocated hat lustige Werte, wie ...
0xCC Wenn der Code mit der Option / GZ kompiliert wird, wird er nicht initialisiert Variablen werden diesem Wert automatisch zugewiesen (auf Byte-Ebene).
CCCCCCCC Wird von der C ++ - Debugging-Laufzeitbibliothek von Microsoft zum Markieren verwendet nicht initialisierter Stapelspeicher
In der Visual Studio-CRT-Quelle, \VC\crt\src\malloc.h
:
Der Compiler macht das für Sie im Debug-Modus, so dass Sie, wenn Sie versehentlich nicht initialisierten Speicher lesen, den eindeutigen 0xCC-Wert sehen und erkennen, dass Sie (wahrscheinlich) nicht initialisierten Speicher lesen. Der 0xCC-Wert hat eine Menge anderer nützlicher Eigenschaften, z. B. ist es der Maschinensprachbefehl zum Aufrufen eines Hardware-Haltepunkts, wenn Sie versehentlich nicht initialisierten Speicher ausführen.
Das Grundprinzip: Machen Sie es einfach, Werte zu identifizieren, die beim Lesen von nicht initialisiertem Speicher entstehen.
Dies geschieht nicht in Ihren Release-Builds.
Diese Technik wurde in Solide Code schreiben eingeführt.
Wenn der Code mit der Option / GZ kompiliert wird, werden diesem Wert automatisch nicht initialisierte Variablen zugewiesen (auf Byte-Ebene).
0xCC ist eine Maschinencodeanweisung zum Aufrufen eines Unterbrechungspunkts. Weitere Informationen finden Sie unter einer anderen Frage .
Tags und Links c++ visual-studio debugging