Aracılığıyla paylaş


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 AfxCheckMemorynew ç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. Örnek:

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ı AfxCheckMemorydağıtmanız ve belleğin üzerine yazma işlemini bu şekilde yalıtmaya çalışmanız gerekir.

Ayrıca bkz.

Yayın Derlemesi Sorunlarını Giderme