Aracılığıyla paylaş


_CrtSetAllocHook

İstemci tanımlı ayırma işlevini C çalışma zamanı hata ayıklama bellek ayırma işlemine bağlayarak yükler (yalnızca hata ayıklama sürümü).

Sözdizimi

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Parametreler

allocHook
C çalışma zamanı hata ayıklama bellek ayırma işlemine bağlanmak için yeni istemci tanımlı ayırma işlevi.

Dönüş değeri

Önceden tanımlanmış ayırma kancası işlevini veya NULL ise allocHook NULLdöndürür.

Açıklamalar

_CrtSetAllocHook bir uygulamanın kendi ayırma işlevini C çalışma zamanı hata ayıklama kitaplığı bellek ayırma işlemine bağlamasına izin verir. Sonuç olarak, bir bellek bloğunu ayırmak, yeniden dağıtmak veya serbest bırakmak için bir hata ayıklama ayırma işlevine yapılan her çağrı, uygulamanın kanca işlevine bir çağrı tetikler. _CrtSetAllocHook uygulamanın yetersiz bellek durumlarını nasıl işlediğini, ayırma düzenlerini inceleme becerisini ve daha sonra analiz için ayırma bilgilerini günlüğe kaydetme fırsatını test etmek için kolay bir yöntem sağlar. Tanımlanmadığında _DEBUG , çağrısı _CrtSetAllocHook ön işleme sırasında kaldırılır.

İşlev, _CrtSetAllocHook içinde allocHook belirtilen yeni istemci tanımlı ayırma işlevini yükler ve önceden tanımlanmış kanca işlevini döndürür. Aşağıdaki örnek, istemci tanımlı ayırma kancasının nasıl prototiplenmesi gerektiğini 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ırmanın kanca işlevine çağrıyı tetikleyen ayırma işleminin (_HOOK_ALLOC, _HOOK_REALLOCve _HOOK_FREE) türünü belirtir. Tetiklenen ayırma türü olduğunda _HOOK_FREE, userData bellek bloğunun serbest olmak üzere olan kullanıcı verileri bölümüne yönelik bir işaretçidir. Ancak, tetiklenen ayırma türü _HOOK_ALLOC veya _HOOK_REALLOCuserData olduğunda, bellek bloğunun henüz ayrılmamış olması gerekirNULL.

size bellek bloğunun boyutunu bayt cinsinden belirtir, blockType bellek bloğunun türünü belirtir, requestNumber bellek bloğunun nesne ayırma sırası numarasıdır ve varsa kaynak filename dosya adını ve lineNumber tetikleme ayırma işleminin başlatıldığı satır numarasını belirtin.

Kanca işlevinin işlenmesi tamamlandıktan sonra, ana C çalışma zamanı ayırma işlemine nasıl devam etmek gerektiğini bildiren bir Boole değeri döndürmesi gerekir. Kanca işlevi, ana ayırma işleminin kanca işlevi hiç çağrılmamış gibi devam etmesi istediğinde, kanca işlevi özgün tetikleme ayırma işleminin yürütülmesine neden olan değerini döndürmelidir TRUE. Kanca işlevi, geçerli ayırma işlemine veya hata ayıklama yığınının durumuna müdahale etmeden daha sonra çözümleme için ayırma bilgilerini toplayabilir ve kaydedebilir.

Kanca işlevi, ana ayırma işleminin tetikleme ayırma işlemi çağrılmış ve başarısız olmuş gibi devam etmek istediğinde, kanca işlevi döndürmelidir FALSE. Kanca işlevi, uygulamanın her durumu nasıl işlediğini test etmek için çok çeşitli bellek koşullarının benzetimini yapabilir ve yığın durumlarında hata ayıklayabilir.

Kanca işlevini temizlemek için öğesine _CrtSetAllocHookgeçinNULL.

Diğer bellek yönetimi işlevleriyle nasıl _CrtSetAllocHook kullanabileceğiniz veya kendi istemci tanımlı kanca işlevlerinizi nasıl yazabileceğiniz hakkında daha fazla bilgi için bkz . Hata ayıklama kancası işlevi yazma.

Not

_CrtSetAllocHook/clr:pure altında desteklenmez. /clr:pure ve /clr:safe derleyici seçenekleri Visual Studio 2015'te kullanım dışıdır ve Visual Studio 2017'de kaldırılmıştır.

Gereksinimler

Yordam Gerekli başlık
_CrtSetAllocHook <crtdbg.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Kitaplıklar

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

Örnek

nasıl kullanılacağına _CrtSetAllocHookilişkin bir örnek için bkz crt_dbg2. .

Ayrıca bkz.

Hata ayıklama yordamları
_CrtGetAllocHook