_CrtSetAllocHook

Instala una función de asignación definida por el cliente enlazándola al proceso de asignación de memoria de depuración en tiempo de ejecución de C (solo versión de depuración).

Sintaxis

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Parámetros

allocHook
Nueva función de asignación definida por el cliente que se va a enlazar al proceso de asignación de memoria de depuración en tiempo de ejecución de C.

Valor devuelto

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

Comentarios

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

La función _CrtSetAllocHook instala la nueva función de asignación definida por el cliente especificada en allocHook y devuelve la función de enlace definida previamente. En el ejemplo siguiente se muestra cómo se deben crear prototipos de un enlace de asignación definido por el cliente:

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

El allocType argumento especifica el tipo de operación de asignación (_HOOK_ALLOC, _HOOK_REALLOCy _HOOK_FREE) que desencadenó la llamada a la función de enlace de la asignación. Cuando el tipo de asignación desencadenante 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 desencadenador es _HOOK_ALLOC o _HOOK_REALLOC, userData se NULL debe a que el bloque de memoria aún no se ha asignado.

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

Una vez que la función de enlace se ha terminado de procesar, 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 quiere que el proceso de asignación principal continúe como si nunca se hubiera llamado a la función de enlace, la función de enlace debería devolver TRUE, lo que hace que se ejecute la operación de asignación de desencadenamiento original. La función de enlace puede recopilar y guardar información de asignación para su análisis posterior, sin interferir con la operación de asignación actual o el estado del montón de depuración.

Si la función de enlace indica que el proceso de asignación principal debe continuar como si se hubiera producido un error al llamar a la función de asignación desencadenante, la función de enlace debe devolver FALSE. La función de enlace puede simular una amplia gama de condiciones de memoria y estados de montón de depuración para probar cómo controla la aplicación cada situación.

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

Para obtener más información sobre cómo _CrtSetAllocHook se puede usar con otras funciones de administración de memoria o cómo escribir sus propias funciones de enlace definidas por el cliente, consulte Escritura de funciones de enlace de depuración.

Nota:

_CrtSetAllocHook no se admite en /clr:pure. Las opciones del compilador /clr:pure y /clr:safe están en desuso en Visual Studio 2015 y se han eliminado admiten en Visual Studio 2017.

Requisitos

Routine Encabezado necesario
_CrtSetAllocHook <crtdbg.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Bibliotecas

Solo versiones de depuración de las bibliotecas en tiempo de ejecución de C.

Ejemplo

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

Consulte también

Rutinas de depuración
_CrtGetAllocHook