_CrtSetAllocHook

Instalar una función de asignación definido por cliente enlazandola en el proceso de asignación de memoria de depuración en tiempo de ejecución de C (versión de depuración solo).

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook 
);

Parámetros

  • allocHook
    Nueva función de asignación definido por cliente el enlace en el proceso de asignación de memoria de depuración en tiempo de ejecución de C.

Valor devuelto

Devuelve la función previamente definido de enlace de asignación, o NULL si allocHook es NULL.

Comentarios

_CrtSetAllocHook ofrece a aplicación el enlace su propia función de asignación en el proceso de asignación de memoria de la biblioteca de depuración en tiempo de ejecución de C.Como resultado, cada llamada a una función de asignación de depuración para asignar, para reasignar, o para liberar un bloque de memoria activa una llamada a la función de enlace de la aplicación._CrtSetAllocHook proporciona una aplicación con un método sencillo para probar cómo la aplicación controla situaciones de memoria insuficiente, la capacidad de examinar pautas de asignación, y la posibilidad de registrar información de asignación para análisis posterior.Cuando _DEBUG no está definido, las llamadas a _CrtSetAllocHook se quitan durante el preprocesamiento.

La función de _CrtSetAllocHook instala la nueva función de asignación definido por cliente especificada en allocHook y devuelve la función previamente definido del enlace.El ejemplo siguiente muestra cómo un enlace definido por cliente de asignación debe ser prototipado:

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

El argumento de allocType especifica el tipo de operación (_HOOK_ALLOC, _HOOK_REALLOC, y _HOOK_FREEde asignación) que desencadenó la llamada a la función de enlace de asignación.Cuando el tipo de asignación que desencadena es _HOOK_FREE, userData es un puntero a la sección de datos de usuario del bloque de memoria que se va a liberar.Sin embargo, cuando el tipo de asignación que desencadena es _HOOK_ALLOC o _HOOK_REALLOC, userData es NULL porque el bloque de memoria no se ha asignado todavía.

size especifica el tamaño del bloque de memoria de bytes, blockType indica el tipo de bloque de memoria, requestNumber es el número de orden de la asignación de objetos del bloque de memoria, y, si está disponible, filename y lineNumber especifique el nombre del archivo y el número de línea donde la operación de asignación que desencadenaba se inicia.

Después de que la función de enlace ha finalizado el procesamiento, debe devolver un valor booleano, que indica al proceso de asignación principal en tiempo de ejecución de C cómo continuar.Cuando la función de enlace desea el proceso de asignación principal para continuar como si la función de enlace nunca se hubiera denominada, la función de enlace debe devolver TRUE.Esto hace que la operación original de la asignación que desencadena que se va a ejecutar.Mediante esta implementación, la función de enlace puede recopilar y guardar la información de asignación para análisis posteriores, sin interferir con la operación de asignación o el estado actual del montón de depuración.

Cuando el enlace que se produjo un error en la función desea el proceso de asignación principal para continuar como si la operación de asignación que desencadenaba fuera denominada y se, la función de enlace debe devolver FALSE.Mediante esta implementación, la función de enlace puede simular una amplia gama de condiciones de memoria y depurar los estados de la pila para probar cómo la aplicación controla cada escenario.

Para borrar la función de enlace, pase NULL a _CrtSetAllocHook.

Para obtener más información sobre cómo _CrtSetAllocHook se puede utilizar con otras funciones de administración de memoria o cómo escribir dispone de funciones definido por cliente de enlace, vea Escribir poseer funciones de enlace de depuración.

[!NOTA]

_CrtSetAllocHook no se admite en /clr:pure.

Requisitos

rutina

Encabezado necesario

_CrtSetAllocHook

<crtdbg.h>

Para obtener más información de compatibilidad, vea compatibilidad en la Introducción.

bibliotecas

Versiones de depuración de Bibliotecas en tiempo de ejecución de C únicamente.

Ejemplo

Para obtener un ejemplo de cómo utilizar _CrtSetAllocHook, vea crt_dbg2.

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Vea también

Referencia

Rutinas de depuración

_CrtGetAllocHook