Partager via


_expand_dbg

Redimensionne un bloc de mémoire spécifié dans le tas en développant ou en contractant le bloc (version debug uniquement).

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

Paramètres

  • userData
    Pointeur vers le bloc de mémoire alloué précédemment.

  • newSize
    nouvelle taille demandée pour le bloc (en octets).

  • blockType
    type demandé pour le bloc redimensionné : _CLIENT_BLOCKou _NORMAL_BLOCK.

  • filename
    Le pointeur sur le nom du fichier source qui l'a demandé développez l'opération ou l' NULL.

  • linenumber
    Numéro de ligne dans le fichier source où l'opération de développement a été demandée ni NULL.

Les paramètres d' filename et d' linenumber sont uniquement disponibles si _expand_dbg a été appelé explicitement ou la constante de préprocesseur de _CRTDBG_MAP_ALLOC a été définie.

Valeur de retour

En cas de réussite, _expand_dbg retourne un pointeur vers le bloc de mémoire redimensionné.Étant donné que la mémoire n'est pas déplacée, l'adresse est identique à l'userData.Si une erreur s'est produite ou le bloc n'a pas pu être développé à la taille demandée, il retourne NULL.Si une erreur se produit, errno est avec les informations du système d'exploitation sur la nature de l'échec.Pour plus d'informations sur errno, consultez errno, _doserrno, _sys_errlist, et _sys_nerr.

Notes

La fonction d' _expand_dbgest une version debug de la fonction dedéveloppez _.Lorsque _DEBUG n'est pas défini, chaque appel à _expand_dbgest réduit à un appel à _expand._expandet _expand_dbgredimensionnent un bloc de mémoire dans le tas de base, mais _expand_dbg s'adapte à plusieurs fonctionnalités de débogage : mémoires tampons de chaque côté de la partie utilisateur du bloc à déterminer des fuites, un paramètre de type de bloc pour suivre des types spécifiques d'allocation, et filename/informations d'linenumber pour déterminer l'origine des demandes d'allocation.

_expand_dbg redimensionne le bloc de mémoire spécifié avec un peu plus d'espace que newSizedemandé.newSize peut être supérieur ou égal à la taille du bloc de mémoire alloué à l'origine.L'espace supplémentaire est utilisé par le gestionnaire du tas de débogage pour lier les blocs de mémoire de débogage et pour fournir à l'application les informations d'en-tête du débogage et remplacer des mémoires tampons.Le redimensionnement est accompli en développant ou en contractant le bloc de mémoire d'origine._expand_dbg ne déplace pas le bloc de mémoire, de même que la fonction de _realloc_dbg .

Lorsque newSize est supérieure à la taille des blocs d'origine, le bloc de mémoire est développé.pendant une expansion, si le bloc de mémoire ne peut pas être développé pour s'adapter à la taille demandée, NULL est retourné.Lorsque newSize est inférieure à la taille des blocs d'origine, le bloc de mémoire est contracté jusqu'à ce que la nouvelle taille obtention.

Pour plus d'informations sur la manière dont les blocs de mémoire sont alloués, initialisés, et gérés dans la version debug de tas de base, consultez gestion de la mémoire et le tas de débogage.Pour plus d'informations sur les types de bloc d'allocation et leur utilisation, consultez types de blocs sur le tas de débogage.Pour plus d'informations sur les différences entre appeler une fonction standard du tas et sa version debug dans une version debug d'une application, consultez À l'aide de la version debug ou la version de base.

cette fonction valide ses paramètres.Si memblock est un pointeur null, ou si la taille est supérieure à _HEAP_MAXREQ, cette fonction appelle un gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, errno est défini à EINVAL et la fonction retourne NULL.

Configuration requise

routine

en-tête requis

_expand_dbg

<crtdbg.h>

Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.

bibliothèques

Versions debug de Bibliothèques runtime C uniquement.

Exemple

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

Commentaire

La sortie de ce programme dépend de la capacité de votre ordinateur de développer toutes les sections.si toutes les sections sont développées, la sortie est reflétée dans la section de sortie.

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.

Voir aussi

Référence

Déboguez des routines

_malloc_dbg