_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
NULL
dö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_REALLOC
ve _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_REALLOC
userData
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 _CrtSetAllocHook
geç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 _CrtSetAllocHook
ilişkin bir örnek için bkz crt_dbg2
. .