Compartir a través de


_calloc_dbg

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

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

Parámetros

  • num
    número solicitado de bloques de memoria.

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

  • blockType
    tipo solicitado de bloque de memoria: _CLIENT_BLOCK o _NORMAL_BLOCK.

    Para obtener información sobre la asignación bloquee los tipos y cómo se utilizan, vea Tipos de bloques del montón de depuración.

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

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

Los parámetros de filename y de linenumber sólo están disponibles cuando _calloc_dbg se ha denominado explícitamente o constante de preprocesador _CRTDBG_MAP_ALLOC ha sido definidas.

Valor devuelto

Cuando se complete correctamente, esta función devuelve un puntero a la parte del usuario del bloque de memoria asignado pasado, llama a la nueva función de controlador, o devuelve NULL.Para obtener una descripción completa del comportamiento de vuelta, vea la sección comentarios.Para obtener más información sobre cómo se usa la nueva función de controlador, vea la función de calloc .

Comentarios

_calloc_dbg es una versión de depuración de la función de calloc .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 de num en el 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 pérdidas.

  • Un parámetro blocktype para realizar tipos específicos de asignación.

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

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

_calloc_dbg establece errno a ENOMEM si se produce una asignación de memoria; se devuelve EINVAL si la cantidad de memoria necesaria (sobrecarga incluidos mencionada previamente) supera _HEAP_MAXREQ.Para obtener información sobre estos y otros códigos de error, vea errno, _doserrno, _sys_errlist, y _sys_nerr.

Para obtener información sobre cómo los bloques de memoria se asignan, inicialice, y se administran en la versión de depuración del montón base, vea Administración de memoria y el montón de depuración.Para obtener información sobre las diferencias entre llamar a una función estándar de la pila en la versión de depuración en una compilación de depuración de una aplicación, vea Con la versión Versus de depuración la versión base.

Requisitos

rutina

Encabezado necesario

_calloc_dbg

<crtdbg.h>

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

Ejemplo

// 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 );
}
  

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

calloc

_malloc_dbg

_DEBUG