Partager via


realloc

réaffectez les blocs de mémoire.

void *realloc(
   void *memblock,
   size_t size 
);

Paramètres

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

  • size
    nouvelle taille en octets.

Valeur de retour

realloc retourne un pointeur d' void (et éventuellement déplacé) au bloc de mémoire réaffecté.

S'il n'y a pas assez de mémoire libre pour développer le bloc à la taille donnée, le bloc d'origine reste inchangé, et NULL est retourné.

Si size est zéro, le bloc désigné par memblock est libéré ; la valeur de retour est NULL, et memblock est laissé pointant vers un bloc libéré.

Les points de valeur de retour à un espace de stockage qui est obligatoirement aligné pour le stockage d'un type d'objet.Pour obtenir un pointeur vers un type autre qu' void, utilisez un cast de type sur la valeur de retour.

Notes

les modifications de fonction d' realloc la taille d'un bloc de mémoire alloué.les points d'argument d' memblock au début du bloc de mémoire.Si memblock est NULL, realloc se comporte de la même manière qu' malloc et alloue un nouveau bloc d'octets d' size .Si memblock n'est pas NULL, il doit être un pointeur retourné par un appel précédent à calloc, à malloc, ou à realloc.

L'argument d' size attribue la nouvelle taille du bloc, en octets.Le contenu du bloc reste inchangé jusqu'à la plus courte des anciennes et nouvelles tailles, bien que le nouveau bloc peut se trouver à un emplacement différent.Étant donné que le nouveau bloc peut être dans un nouvel emplacement de mémoire, le pointeur retourné par realloc se retrouvera le pointeur passé dans l'argument d' memblock .realloc ne met pas la mémoire nouvellement alloué dans le cas de la croissance de mémoire tampon.

realloc définit errno à ENOMEM si l'allocation de mémoire échoue ou si la quantité de mémoire demandée dépasse _HEAP_MAXREQ.Pour plus d'informations sur cette et d'autres codes d'erreur, consultez errno, _doserrno, _sys_errlist, et _sys_nerr.

appelsmallocd'reallocpour utiliser la fonction C++ _set_new_mode pour définir le nouveau mode de gestionnaire.Le nouveau mode de gestionnaire indique si, en cas de échec, malloc est d'appeler la nouvelle routine de gestionnaire comme définie par _set_new_handler.Par défaut, malloc n'appelle pas la nouvelle routine de gestionnaire en cas de échec pour allouer de la mémoire.Vous pouvez substituer ce comportement par défaut afin que, lorsque realloc n'allouent pas la mémoire, malloc appelle la nouvelle routine de gestionnaire de la même façon que l'opérateur d' new nécessaire si elle échoue pour la même raison.Pour substituer la valeur par défaut, appelez

_set_new_mode(1)

tôt dans ceux du programme, ou le lien avec NEWMODE.OBJ (consultez Options de lien).

Lorsque l'application est liée à une version debug des bibliothèques runtime C, realloc le résout vers _realloc_dbg.Pour plus d'informations sur la façon dont le tas est exécuté pendant le processus de débogage, consultez Le tas de débogage CRT.

realloc est __declspec(noalias) marqué et __declspec(restrict), ce qui signifie que la fonction est garantie ne pas modifier les variables globales, et que le pointeur retourné pas alias.Pour plus d'informations, consultez noalias et le restreignez.

Configuration requise

routine

en-tête requis

realloc

<stdlib.h> et <malloc.h>

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

Exemple

// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
 

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

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

   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
      exit( 1 );

   size = _msize( buffer );
   printf_s( "Size of block after malloc of 1000 longs: %u\n", size );

   // Reallocate and show new size:
   oldbuffer = buffer;     // save pointer in case realloc fails
   if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) )) 
        ==  NULL )
   {
      free( oldbuffer );  // free original block
      exit( 1 );
   }
   size = _msize( buffer );
   printf_s( "Size of block after realloc of 1000 more longs: %u\n", 
            size );

   free( buffer );
   exit( 0 );
}
  

É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

Allocation de mémoire

calloc

free

malloc