Aracılığıyla paylaş


Ayırma kancaları ve c çalışma zamanı bellek ayırma

Bunlar açıkça yoksay gerekir ayırma kanca işlevlerinin çok önemli bir sınırlama olup _CRT_BLOCK blokları (dahili c Çalışma Zamanı Kitaplığı işlevleri tarafından yapılan bellek ayırma) dahili bellek c Çalışma Zamanı Kitaplığı işlevlerini yapılan her çağrı yapmak durumunda._CRT_BLOCK Engeller gözardı kendi ayırma başına aşağıdaki işlevi kanca gibi kod ekleyerek:

    if ( nBlockUse == _CRT_BLOCK )
        return( TRUE );

Kendi ayırma kanca değil göz ardı ederseniz _CRT_BLOCK sonra herhangi bir c Çalışma Zamanı Kitaplığı işlevi sizin hook adlı programı sonsuz bir döngüye yakalayabilir engeller.Örneğin, printf dahili bir ayırma oluşturur.Kanca kodunuzu çağırırsa printf, sonra da ortaya çıkan ayırma, hook tekrar çağrılabilir, çağıracak neden olur printf yeniden vb. kadar yığın taşıyor.Rapor için gerekirse, _CRT_BLOCK ayırma işlemleri bu kısıtlamayı aşmak için bir yoludur c çalışma zamanı işlevlerini yerine Windows API işlevleri biçimlendirme için kullanın ve çıktı.Windows API c Çalışma Zamanı Kitaplığı öbek kullanmadığından, ayırma hook, sonsuz bir döngüye yakalanmayacaktır.

Çalışma Zamanı Kitaplığı kaynak dosyalarını incelerseniz görürsünüz işlevi varsayılan ayırma kanca olduğunu CrtDefaultAllocHook (hangi basitçe döndürür doğru), kendi, dbghook ayrı bir dosyada bulunur.C.Kendi ayırma hook bile uygulamanızın önce yürütülen çalışma zamanı başlatma kodu tarafından yapılan ayırma adlı isteyip istemediğinizi ana işlevi, bu varsayılan işlevini kullanarak kendi yerine biri ile değiştirebilirsiniz _CrtSetAllocHook.

Ayrıca bkz.

Görevler

crt_dbg2 Sample

Diğer Kaynaklar

Kanca işlev yazma hata ayıklama