Sdílet prostřednictvím


realloc

Přerozdělíte bloků paměti.

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

Parametry

  • memblock
    Ukazatel na bloku dříve přidělené paměti.

  • size
    Nová velikost v bajtech.

Vrácená hodnota

reallocVrátí void ukazatel na blok paměti reallocated (a případně přesunutý).

Pokud není k dispozici dostatek paměti rozbalit do dané velikosti bloku, původní blok ponecháno změny, a NULL je vrácena.

Pokud size nula, je blok odkazuje memblock je uvolněna; Vrácená hodnota je NULL, a memblock je ponechána na uvolněné bloku.

Vrácená hodnota odkazuje na úložný prostor, který je zaručeně vhodně zarovnání pro skladování jakýkoli typ objektu.Získání ukazatele typu než void, použijte typ odevzdaných na vrácenou hodnotu.

Poznámky

realloc Funkce změní velikost bloku přidělené paměti.memblock Argument se odkazuje na začátku bloku paměti.Pokud memblock je NULL, realloc se chová stejně jako malloc a alokuje nový blok size bajtů.Pokud memblock není NULL, by mělo být ukazatel vrácený předchozí volání k calloc, malloc, nebo realloc.

size Argument poskytuje novou velikost bloku, v bajtech.Obsah bloku nezměněna až kratší velikosti nové a staré, ačkoli nový blok může být v jiném umístění.Protože nový blok lze do nového umístění v paměti, ukazatel vrácený realloc je nemusí být ukazatel prošla memblock argument.reallocnemá nula nově přidělené paměti růstu vyrovnávací paměti.

reallocNastaví errno na ENOMEM selhání přidělení paměti nebo množství paměti požadované přesahuje _HEAP_MAXREQ.Informace o této a dalších chybové kódy, errno, _doserrno, _sys_errlist, and _sys_nerr.

reallocvolání mallocpro použití C++ _set_new_mode funkce nastavit nový režim zpracování.Nový režim zpracování označuje, zda při selhání, malloc k volání rutiny nové nastaveném _set_new_handler.Ve výchozím nastavení malloc nemůže volat nové rutiny při selhání přidělení paměti.Toto výchozí chování můžete změnit tak, aby, když realloc selhání přidělení paměti, malloc volání rutiny nové stejným způsobem, že new operátor nemá selže z téhož důvodu.Chcete-li přepsat výchozí nastavení volání

_set_new_mode(1)

brzy, ve které program nebo propojení s NEWMODE.OBJ (see Možnosti odkazů).

Aplikace propojen s ladicí verzi c knihoven run-time realloc převede na _realloc_dbg.Další informace o způsobu je během ladění procesu správy haldy, viz The CRT ladění haldy.

reallocje označena __declspec(noalias) a __declspec(restrict), což znamená, že funkce je zaručena upravit globální proměnné, vrácený ukazatel není s aliasem.Další informace naleznete v noalias a omezit.

Požadavky

Rutina

Požadované záhlaví

realloc

<stdlib.h> a <malloc.h>

Další informace o kompatibilitě, viz Compatibility v úvodu.

Příklad

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

Ekvivalent v rozhraní .NET Framework

Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Viz také

Referenční dokumentace

Přidělení paměti

calloc

free

malloc