Aracılığıyla paylaş


_CrtSetAllocHook

Bir istemci tarafından tanımlanan tahsisat işlevi, C çalışma zamanı hata ayıklama bellek ayırma işlemine (yalnızca hata ayıklama sürümü) takma tarafından yükler.

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook 
);

Parametreler

  • allocHook
    C çalışma zamanı hata ayıklama bellek ayırma işlemine kanca için yeni istemci tanımlı tahsisat işlevi.

Dönüş Değeri

Önceden tanımlanmış ayırma kanca işlevi döndürür veya NULL , allocHook olan NULL.

Notlar

_CrtSetAllocHookC çalışma zamanı hata ayıklama kitaplığı bellek ayırma işlemine kendi ayırma işlevini kanca için bir uygulama sağlar.Sonuç olarak, ayırmak için hata ayıklama Tahsisat işlevini her çağrı tahsis ettiğinizde veya bir bellek bloğu Tetikleyicileri uygulama kanca işlevi çağrısı serbest._CrtSetAllocHookbir uygulama uygulama bellek yetersiz durumları nasıl işlediğini test etmek için kolay bir yöntem tahsisat desenleri ve daha sonraki analizler için yükleme bilgilerini günlüğe kaydetmek için Fırsat inceleme olanağı sağlar.Zaman _DEBUG tanımlı değilse, çağrılar _CrtSetAllocHook ön işleme sırasında kaldırılır.

_CrtSetAllocHook İşlevi belirtilen yeni istemci tanımlı tahsisat işlevini yükler allocHook ve önceden tanımlanmış bir kanca işlevi döndürür.Aşağıdaki örnek, nasıl bir istemci tarafından tanımlanan tahsisat kancası örneklenmiş olması gereken gösterir:

int YourAllocHook( int allocType, void *userData, size_t size, int 
blockType, long requestNumber, const unsigned char *filename, int 
lineNumber);

allocType Bağımsız değişkeni, ayırma işleminin türünü belirtir (_HOOK_ALLOC, _HOOK_REALLOC, ve _HOOK_FREE) ayırma 's kanca işlev çağrısı tetiklendi.Tetikleyici tahsisat türü olduğunda _HOOK_FREE, userData yaklaşık boşaltılması için bellek bloğu kullanıcı veri bölümünün bir işaretçidir.Bununla birlikte, tetikleyici tahsisat türü olduğunda _HOOK_ALLOC veya _HOOK_REALLOC, userData olan NULL bellek bloğu henüz tahsis değildir çünkü.

sizebellek boyutunu bayt cinsinden bloke belirtir blockType bellek bloğu türünü gösteren requestNumber nesne ayırma sipariş bellek bloğu sayısıdır ve varsa, filename ve lineNumber tetikleyici ayırma işleminin başlatıldığı kaynak dosya adı ve satır numarasını belirtin.

Kanca işlevi işlemi tamamlandıktan sonra ana C çalışma zamanı ayırma işlemini devam edileceğini belirten bir Boole değeri döndürmelidir.Kanca işlev olarak kanca işlevi hiçbir zaman çağırıldıktan sonra kanca işlevi döndürmelidir devam etmek için ana ayırma işlemini istediği zaman TRUE.Bu, özgün tetikleyici ayırma işlemi yürütülecek neden olur.Bu uygulamasını kullanarak, kanca işlev toplamak ve geçerli ayırma işlemi ya da hata ayıklama öbek durumu engel olmadan daha sonraki analizler için yükleme bilgilerini kaydedin.

Kanca işlev olarak tetikleyici ayırma işlemi çağrıldı ve başarısız sonra kanca işlevi döndürmelidir, devam etmek için ana ayırma işlemini istediği zaman FALSE.Bu uygulama kullanarak kanca işlevi çok çeşitli bellek koşulları benzetimi ve yığın durumları uygulama her durumda işleme biçimini sınamak için hata ayıklama.

Kanca işlevi temizlemek için geçmesi NULL için _CrtSetAllocHook.

Hakkında daha fazla bilgi için _CrtSetAllocHook diğer bellek yönetim işlevleri veya istemci tarafından tanımlanan hook işlevlerinizi yazmaya nasıl kullanılan Hata Ayıklama Kanca İşlevi Yazma.

[!NOT]

_CrtSetAllocHookaltında desteklenmiyor /clr:pure.

Gereksinimler

Yordam

Gerekli başlık

_CrtSetAllocHook

<crtdbg.h>

Daha fazla uyumluluk bilgisi için Giriş altındaki Uyumluluk bölümüne bakın.

Kitaplıklar

Yalnızca C çalışma zamanı kitaplıklarının hata ayıklama sürümleri.

Örnek

Nasıl kullanılacağını gösteren bir örnek için _CrtSetAllocHook, bkz: crt_dbg2.

.NET Framework Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Hata Ayıklama Yordamları

_CrtGetAllocHook