Korzystanie z kompilacji debugowania do sprawdzania nadpisywania pamięci
Użyty Kompilacja debugowania do sprawdzenia dla zastępowania pamięci, należy najpierw ponownie skompiluj projekt do debugowania.Następnie przejdź do początku aplikacji InitInstance funkcjonować i Dodaj następujący wiersz:
afxMemDF |= checkAlwaysMemDF;
Program przydzielania pamięci program debug umieszcza bajtów guard wokół wszystkich alokacji pamięci.Jednak te straży bajtów nie coś dobrego, należy sprawdzić, czy zostały zmienione (co oznaczałoby zastępowania pamięci).W przeciwnym razie po prostu zapewnia buforu, który może w rzeczywistości pozwala uciec z zastępowania pamięci.
Włączając checkAlwaysMemDF, wymusi MFC do wywoływania AfxCheckMemory wywołania funkcji zawsze do Nowy lub usunąć składa.Jeśli wykryto zastępowania pamięci wygeneruje komunikat śledzenia, która wygląda podobnie do następującego:
Damage Occurred! Block=0x5533
Jeśli zauważysz jeden z tych komunikatów, należy kroków kod do określenia, w którym szkoda wystąpiła.Aby wyizolować bardziej precyzyjnie, gdzie zastępowania pamięci wystąpił, można prowadzić rozmowy jawne AfxCheckMemory samodzielnie.Na przykład:
ASSERT(AfxCheckMemory());
DoABunchOfStuff();
ASSERT(AfxCheckMemory());
Jeśli zakończy się pomyślnie ASSERT pierwszy i drugi nie powiedzie się, oznacza to, że zastępowania pamięci musi mieć miejsce w między dwoma wywołania funkcji.
W zależności od charakteru aplikacji, okazuje się, że afxMemDF powoduje, że program do uruchomienia zbyt wolno, aby przetestować nawet.afxMemDF Powoduje, że zmienna AfxCheckMemory zostać wywołana dla każdego wywołania do nowych i usunąć.W takim przypadku należy punktowy połączeń do AfxCheckMemory(), jak pokazano powyżej i spróbuj do izolowania pamięć zastąpić w ten sposób.