Belleğin Üzerine Yazma Denetimi için Hata Ayıklama Derlemesini Kullanma
Bellek üzerine yazmayı denetlemek üzere hata ayıklama derlemesini kullanmak için önce hata ayıklama için projenizi yeniden oluşturmanız gerekir. Ardından, uygulamanızın InitInstance
işlevinin en başına gidin ve aşağıdaki satırı ekleyin:
afxMemDF |= checkAlwaysMemDF;
Hata ayıklama bellek ayırıcısı, tüm bellek ayırmalarının çevresine koruma baytları yerleştirir. Ancak, değiştirilip değiştirilmediğini denetlemediğiniz sürece bu koruma baytları işe yaramaz (bu da bir belleğin üzerine yazıldığını gösterir). Aksi takdirde, bu yalnızca bir bellek üzerine yazmayla kurtulmanıza olanak tanıyabilecek bir arabellek sağlar.
öğesini açarakcheckAlwaysMemDF
, MFC'yi her çağrı yapıldığında veya delete
yapıldığında işleve AfxCheckMemory
new
çağrı yapmaya zorlarsınız. Bir bellek üzerine yazma algılanırsa, aşağıdakine benzer bir TRACE iletisi oluşturur:
Damage Occurred! Block=0x5533
Bu iletilerden birini görürseniz, hasarın nerede oluştuğuna karar vermek için kodunuzda adım adım ilerleymelisiniz. Belleğin üzerine yazma işleminin gerçekleştiği yeri daha hassas bir şekilde yalıtmak için AfxCheckMemory
kendinize açık çağrılar yapabilirsiniz. Örneğin:
ASSERT(AfxCheckMemory());
DoABunchOfStuff();
ASSERT(AfxCheckMemory());
İlk ASSERT başarılı olursa ve ikincisi başarısız olursa, iki çağrı arasındaki işlevde bellek üzerine yazma işleminin gerçekleşmiş olması gerekir.
Uygulamanızın yapısına bağlı olarak, bunun programınızın test etmek için çok yavaş çalışmasına neden olduğunu afxMemDF
görebilirsiniz. değişkeni, afxMemDF
yeni ve silmeye yapılan her çağrı için çağrılmaya neden olur AfxCheckMemory
. Bu durumda, yukarıda gösterildiği gibi ( ) öğesine kendi çağrılarınızı AfxCheckMemory
dağıtmanız ve belleğin üzerine yazma işlemini bu şekilde yalıtmaya çalışmanız gerekir.