Aracılığıyla paylaş


_CrtSetAllocHook

Bir istemci tarafından tanımlanan tahsisat işlevini c çalışma zamanı hata ayıklama bellek ayırma işlemine (yalnızca hata ayıklama sürümü) takma 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 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 takmak bir uygulama sağlar.Sonuç olarak tahsis etmek için her hata ayıklama tahsisatı işlevine çağrı yeniden tahsis ettiğinizde veya bir bellek bloğu Tetikleyicileri uygulama kanca işlev çağrısı serbest._CrtSetAllocHookbir uygulamanın uygulama bellek yetersiz durumları işleme biçimini sınamak için kolay bir yöntem ayırma desenleri ve fırsatı daha sonraki analizler için ayırma bilgilerinin günlüğünü incelemek üzere yeteneği sağlar.Zaman _debug tanımlı değilse, çağıran için _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şlev verir.Bir istemci tarafından tanımlanan tahsisat hook nasıl prototyped olmalıdır aşağıdaki örnekte gösterilmiştir:

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.Ancak, tetikleyici tahsisat türü olduğunda _HOOK_ALLOC veya _HOOK_REALLOC, userData olan NULL çünkü bellek bloğu henüz ayrılmamış.

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

Kanca işlevi, işlem tamamlandıktan sonra ana c çalışma zamanı ayırma işlemini nasıl devam belirten bir Boole değeri döndürmelidir.Kanca işlev olarak kanca işlevi asla ç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, yürütülecek tetikleyici özgün ayırma işleminin neden olur.Kanca işlevi, bu uygulamasını kullanarak, toplamak ve geçerli ayırma işlemi ya da hata ayıklama öbek durumu etkilemeksizin daha sonraki analizler için yükleme bilgilerini kaydedin.

Ne zaman kanca işlevi istediği gibi 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 FALSE.Kanca işlevi, bu uygulamasını kullanarak, ç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 bünyesinde NULL için _CrtSetAllocHook.

Hakkında daha fazla bilgi için _CrtSetAllocHook diğer bellek yönetimi işlevlerini veya istemci tarafından tanımlanan hook işlevlerinizi yazma, bakın nasıl kullanılan Yazma Your kendi hata ayıklama kanca işlevler.

[!NOT]

_CrtSetAllocHookaltında desteklenmeyen /clr:pure.

Gereksinimler

Yordamı

Gerekli başlık

_CrtSetAllocHook

<crtdbg.h>

Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.

Kitaplıkları

Hata ayıklama sürümlerini c çalışma zamanı kitaplıkları yalnızca.

Örnek

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

.NET Framework Eşdeğeri

Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

Yordamlar hata ayıklama

_CrtGetAllocHook