Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Změní velikost bloku paměti.
Syntaxe
void *_expand(
void *memblock,
size_t size
);
Parametry
memblock
Ukazatel na dříve přidělený blok paměti
size
Nová velikost v bajtech
Vrácená hodnota
_expand vrátí ukazatel void na relokovaný blok paměti. _expand, na rozdíl od realloc, nemůže přesunout blok změnit jeho velikost. Pokud je tedy k dispozici dostatek paměti pro rozbalení bloku bez přesunutí, memblock je parametr _expand stejný jako vrácená hodnota.
_expand vrátí NULL , když se během operace zjistí chyba. Pokud _expand se například používá ke zmenšení bloku paměti, může zjistit poškození v malé haldě bloku nebo neplatný ukazatel bloku a vrátit NULL.
Pokud není k dispozici dostatek paměti pro rozbalení bloku bez přesunutí, vrátí NULLfunkce . _expand nikdy nevrátí blok rozbalený na velikost menší, než je požadováno. Pokud dojde k selhání, errno označuje povahu selhání. Další informace o errno, vizerrno , _doserrno, _sys_errlist, a _sys_nerr.
Návratová hodnota odkazuje na prostor úložiště, který je vhodně zarovnaný pro úložiště libovolného typu objektu. Chcete-li zkontrolovat novou velikost položky, použijte _msize. Pokud chcete získat ukazatel na jiný typ než void, použijte přetypování typu na návratovou hodnotu.
Poznámky
Funkce _expand změní velikost dříve přiděleného bloku paměti tím, že se pokusí rozbalit nebo uzavřít blok bez přesunutí jeho umístění v haldě. Parametr memblock odkazuje na začátek bloku. Parametr size poskytuje novou velikost bloku v bajtech. Obsah bloku se nezmění až na kratší velikost nových a starých velikostí. memblock nemělo by to být blok, který byl uvolněn.
Poznámka:
Na 64bitových platformách nemusí být blok kontraktován, _expand pokud je nová velikost menší než aktuální velikost; zejména pokud byl blok menší než 16 tisíc, a proto přidělen v haldě s nízkou fragmentací, _expand ponechá blok beze změny a vrátí memblock.
Pokud je aplikace propojena s ladicí verzí knihoven runtime jazyka C, _expand přeloží na _expand_dbg. Další informace o správě haldy během procesu ladění naleznete v části Haldy ladění CRT.
Tato funkce ověří své parametry. Pokud memblock je ukazatel null, tato funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat provádění, errno je nastavena na EINVAL a funkce vrátí NULL. Je-li size větší než _HEAP_MAXREQ, errno je nastavena na ENOMEM, a funkce vrátí NULL.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
| Function | Požadovaný hlavičkový soubor |
|---|---|
_expand |
<malloc.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
Allocate a 512 element buffer
Allocated 512 bytes at 002C12BC
Expanded block to 1024 bytes at 002C12BC