Compartir a través de


_expand_dbg

Cambia el tamaño de un bloque de memoria especificado en la pila expandiendo o contratando el bloque (versión de depuración solo).

void *_expand_dbg( 
   void *userData,
   size_t newSize,
   int blockType,
   const char *filename,
   int linenumber 
);

Parámetros

  • userData
    Puntero al bloque de memoria previamente asignado.

  • newSize
    Nuevo tamaño solicitado para el bloque (en bytes).

  • blockType
    Tipo solicitado para el bloque cambia de tamaño: _CLIENT_BLOCKo _NORMAL_BLOCK.

  • filename
    El puntero al nombre del archivo de código fuente que solicitó expanda operación o NULL.

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

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

Valor devuelto

Cuando se complete correctamente, _expand_dbg devuelve un puntero al bloque de memoria cambia de tamaño.Dado que la memoria no se mueve, la dirección es igual que el userData.Si un error o el bloque no se puede expandir el tamaño solicitado, devuelve NULL.Si se produce un error, errno es con información del sistema operativo sobre la naturaleza del error.Para obtener más información sobre errno, vea errno, _doserrno, _sys_errlist, y _sys_nerr.

Comentarios

La función de _expand_dbges una versión de depuración de la función deexpanda de _.Cuando _DEBUG no está definido, cada llamada a _expand_dbgse reduce a una llamada a _expand._expandy _expand_dbgcambian el tamaño de un bloque de memoria del montón base, pero _expand_dbg incluye varias características de depuración: búferes situados a cada lado de la parte del usuario del bloque para comprobar que escape, un parámetro blocktype para realizar tipos específicos de asignación, y filename/información delinenumber determinan el origen de las solicitudes de asignación.

_expand_dbg cambia el tamaño del bloque de memoria especificado con ligeramente más espacio que newSizesolicitado.newSize sea mayor o menor que el tamaño del bloque de memoria originalmente asignado.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.El cambio de tamaño es logrado expandiendo o contratando el bloque de memoria original._expand_dbg no mueve el bloque de memoria, al igual que la función de _realloc_dbg .

cuando newSize es mayor que el tamaño de bloque original, se expande el bloque de memoria.Durante una extensión, si el bloque de memoria no se puede expandir para adaptarse al tamaño solicitado, se devuelve NULL .Cuando newSize es menor que el tamaño de bloque original, se contrata el bloque de memoria hasta que se obtenga el nuevo tamaño.

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 la asignación bloquee los tipos y cómo se utilizan, vea Tipos de bloques del montón de depuración.Para obtener información sobre las diferencias entre llamar a una función estándar de la pila y 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.

esta función valida sus parámetros.Si memblock es un puntero NULL, o si el tamaño es mayor que _HEAP_MAXREQ, esta función invoca un controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, errno se establece en EINVAL y la función devuelve NULL.

Requisitos

rutina

Encabezado necesario

_expand_dbg

<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

// crt_expand_dbg.c
//
// This program allocates a block of memory using _malloc_dbg
// and then calls _msize_dbg to display the size of that block.
// Next, it uses _expand_dbg to expand the amount of
// memory used by the buffer and then calls _msize_dbg again to
// display the new amount of memory allocated to the buffer.
//

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>

int main( void )
{
   long *buffer;
   size_t size;

   // Call _malloc_dbg to include the filename and line number
   // of our allocation request in the header
   buffer = (long *)_malloc_dbg( 40 * sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );
   if( buffer == NULL )
      exit( 1 );

   // Get the size of the buffer by calling _msize_dbg
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );

   // Expand the buffer using _expand_dbg and show the new size
   buffer = (long *)_expand_dbg( buffer, size + sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );

   if( buffer == NULL )
      exit( 1 );
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _expand_dbg of 1 more long: %u\n",
           size );

   free( buffer );
   exit( 0 );
}
  

Comment

El resultado de este programa depende de la capacidad de expandir todas las secciones.Si se expanden todas las secciones, reflejan a la sección de salida.

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

_malloc_dbg