_calloc_dbg

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Asigna varios bloques de memoria del montón con espacio adicional para un encabezado de depuración y búferes sobrescritos (solo versión de depuración).

void *_calloc_dbg(   
   size_t num,  
   size_t size,  
   int blockType,  
   const char *filename,  
   int linenumber   
);  

Parámetros

num
Número de bloques de memoria solicitado.

size
Tamaño de cada bloque de memoria solicitado (bytes).

blockType
Tipo de bloque de memoria solicitado: _CLIENT_BLOCK o _NORMAL_BLOCK.

Para obtener información acerca de la asignación de tipos de bloque y cómo se utilizan, consultetipos de bloques en el montón de depuración.

filename
Puntero al nombre del archivo de código fuente que solicitó la operación de asignación o NULL.

linenumber
Número de línea del archivo de código fuente en la que se solicitó la operación de asignación o NULL.

El filename y linenumber parámetros solo están disponibles cuando _calloc_dbg se ha llamado explícitamente o _CRTDBG_MAP_ALLOC se ha definido la constante de preprocesador.

Cuando se lleva a cabo correctamente, esta función devuelve un puntero a la parte del usuario del último bloque de memoria asignado, llama a la nueva función de controlador o devuelve NULL. Para obtener una descripción completa del comportamiento de retorno, vea la sección de comentarios. Para obtener más información sobre cómo se usa la nueva función de controlador, consulte el calloc (función).

_calloc_dbges una versión de depuración de la calloc (función). Cuando _DEBUG no está definido, cada llamada a _calloc_dbg se reduce a una llamada a calloc. calloc y _calloc_dbg asignan los bloques de memoria num del montón base, pero _calloc_dbg proporciona varias características de depuración:

  • Búferes situados a cada lado de la parte del usuario del bloque para comprobar si hay pérdidas.

  • Un parámetro de tipo de bloque para realizar el seguimiento de tipos de asignación específicos.

  • filename/linenumberinformación para determinar el origen de las solicitudes de asignación.

_calloc_dbg asigna cada bloque de memoria con un poco más de espacio que el size solicitado. El administrador del montón de depuración usa el espacio adicional para vincular los bloques de memoria de depuración, y para proporcionar a la aplicación información de encabezado de depuración y sobrescribir los búferes. Cuando se asigna el bloque, la parte del usuario de bloque se rellena con el valor 0xCD y cada uno de los búferes sobrescritos se rellena con 0xFD.

_calloc_dbg establece errno en ENOMEM si se produce un error de asignación de memoria. Se devuelve EINVAL si la cantidad de memoria necesaria (incluida la sobrecarga ya mencionada) es mayor que _HEAP_MAXREQ. Para obtener información sobre este y otros códigos de error, consulte errno, _doserrno, _sys_errlist y _sys_nerr.

Para obtener información sobre cómo se asignan, inicializan y administran los bloques de memoria en la versión de depuración del montón base, vea CRT Debug Heap Details. Para obtener información acerca de las diferencias entre llamar a una función estándar del montón frente a su versión de depuración en una compilación de depuración de una aplicación, consulte depurar versiones de funciones asignación del montón.

RutinaEncabezado necesario
_calloc_dbg<crtdbg.h>

Para obtener más información sobre compatibilidad, vea Compatibility en la introducción.

// crt_callocd.c  
/*  
 * This program uses _calloc_dbg to allocate space for  
 * 40 long integers. It initializes each element to zero.  
 */  
#include <stdio.h>  
#include <malloc.h>  
#include <crtdbg.h>  
  
int main( void )  
{  
        long *bufferN, *bufferC;  
  
        /*   
         * Call _calloc_dbg to include the filename and line number  
         * of our allocation request in the header and also so we can  
         * allocate CLIENT type blocks specifically  
         */  
        bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );  
        bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );  
        if( bufferN != NULL && bufferC != NULL )  
              printf( "Allocated memory successfully\n" );  
        else  
              printf( "Problem allocating memory\n" );  
  
        /*   
         * _free_dbg must be called to free CLIENT type blocks  
         */  
        free( bufferN );  
        _free_dbg( bufferC, _CLIENT_BLOCK );  
}  

Allocated memory successfully  

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

Rutinas de depuración
calloc
_malloc_dbg
_DEBUG

Mostrar: