_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_REALLOC
y _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
.