BOOL AfxCheckMemory ( );
Rückgabewert
Ungleich NULL, wenn keine Speicherfehler; andernfalls 0.
Bemerkungen
Diese Funktion überprüft den freien Speicher-Pool und druckt Fehlermeldungen wie erforderlich. Wenn die Funktion keine Speicherfehler erkennt, gibt es nichts.
Alle derzeit auf dem Heap reserviert Speicherblöcke werden überprüft, einschließlich derer von neuen , aber nicht die direkte Aufrufe zur zugrunde liegenden Speicher Allocators, wie z. B. die Malloc -Funktion oder der GlobalAlloc -Funktion von Windows reserviert reserviert. Wenn jeder Block gefunden wird, beschädigt zu sein, wird eine Meldung an die Debugger-Ausgabe gedruckt.
Wenn Sie die Zeile aufnehmen
# Definieren Sie neue DEBUG_NEW
in einem Programmmodul zeigen dann nachfolgende Aufrufe von AfxCheckMemory der Dateiname und die Zeilennummer wo der Speicher reserviert wurde.
Hinweis&Nbsp; Wenn Ihr Modul eine oder mehrere Implementierungen der serialisierbaren Klassen enthält, dann müssen Sie die #define Zeile nach dem letzten IMPLEMENT_SERIAL -Makro-Aufruf.
Diese Funktion funktioniert nur in der Debugversion des MFC.
Beispiel
/ / Beispiel für AfxCheckMemory
Käfig * Pcage = new CAge (21); &Nbsp; / / Käfig CObject abgeleitet ist.
Alter * Seite = Neues Alter (22); / / Alter ist nicht von CObject abgeleitet wurden.
*(((Char*) Pcage) - 1) = 99; / / Beschädigte vorhergehenden Garde Byte
*(((Char*) Seite) - 1) = 99; / / Beschädigte vorhergehenden Garde Byte
AfxCheckMemory()
Die Ergebnisse aus dem Programm sind wie folgt:
kontrollkästchen Speicherfehler an $0067495F = $63, sollte $FD
Schaden: Vor Non-Object Block bei $00674960
Non-Objekt in der Datei test02.cxx(48)
Non-Objekt am $00674960 ist 2 Bytes lang
Kontrollkästchen Speicherfehler an $00674905 = $63, sollte $FD
Schaden: Vor dem Objekt Block bei $00674906
Objekt in Datei test02.cxx(47)
Objekt am $00674906 ist sechs Bytes lang