_expand_dbg
Změní velikost určeného bloku paměti haldy nebo smluvní blok (pouze ladicí verze).
void *_expand_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int linenumber
);
Parametry
userData
Ukazatel na bloku dříve přidělené paměti.newSize
Požadovaná velikost bloku (v bajtech).blockType
Požadován typ změněnou velikostí bloku: _CLIENT_BLOCK nebo _NORMAL_BLOCK.filename
Ukazatel myši na název zdrojového souboru, která požadovala rozbalte operace nebo NULL.linenumber
Číslo zdrojového souboru, kde byla požadována operace rozbalení nebo NULL.
filename a linenumber parametry jsou k dispozici pouze při _expand_dbg byl volán explicitně nebo _CRTDBG_MAP_ALLOC byla definována konstanta preprocesoru.
Vrácená hodnota
Po úspěšném ukončení _expand_dbg vrací ukazatel na blok změněnou velikostí paměti.Protože paměť není přesunut, adresa je stejná jako userData.Pokud došlo k chybě nebo bloku nelze rozbalit na požadovanou velikost, vrátí NULL.Pokud dojde k selhání, errno s informace z operačního systému o povaze selhání.Pro více informací o errno si prohlédněte Kód chyby, _doserrno, _sys_errlist a _sys_nerr.
Poznámky
_expand_dbg Je funkce ladicí verzi _rozbalte funkce.Při _DEBUG není definována, každé volání _expand_dbg na volání _expand.I _expand a _expand_dbg velikost bloku paměti haldy základní, ale _expand_dbg vejde několik funkce ladění: vyrovnávacích pamětí na obou stranách uživatele část bloku test těsnosti parametr typu blok sledování přidělení zvláštních typů a filename/linenumber informace k určení původu žádosti o přidělení.
_expand_dbgZmění velikost bloku paměti určené s mírně více místa než požadovaný newSize.newSizemůže být větší nebo menší než velikost bloku původně přidělené paměti.Další místo používá správce hald ladění bloků paměti ladění propojení a k aplikaci s ladicími informacemi hlavičky a přepsat vyrovnávací paměti.Rozbalení nebo smluvní původní blok paměti lze provést změnu velikosti._expand_dbgpřesunout blok paměti, stejně jako _realloc_dbg funkce.
Při newSize je větší než původní blok rozbalený velikost bloku paměti.Při rozšíření, je-li blok paměti nelze rozbalit tak, aby odpovídala požadované velikosti NULL je vrácena.Při newSize je menší než původní blok velikost bloku paměti je smluvně dokud novou velikost.
Informace o jak jsou bloky paměti přidělené, inicializován a spravuje v ladicí verzi základní haldy Správa paměti a ladění haldy.Informace o typech bloku přidělení a jejich použití naleznete v tématu Typy bloky na ladění haldy.Informace o rozdílech mezi volání haldy standardní funkce a její verzi ladění v ladicí verzi aplikace naleznete v tématu pomocí ladění verze Versus the Base verze.
Tato funkce ověřuje jeho parametry.Pokud memblock je nulový ukazatel nebo pokud je větší než velikost _HEAP_MAXREQ, tato funkce spustí obslužnou rutinu neplatný parametr popsaným v Ověření parametrů.Pokud je povoleno spuštění pokračovat, errno je nastavena na EINVAL a vrátí funkce NULL.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
_expand_dbg |
<crtdbg.h> |
Další informace o kompatibilitě v tématu Compatibility v úvodu.
Knihovny
Ladění verze C Runtime knihovny pouze.
Příklad
// 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 (Komentář)
Výstup programu závisí na schopnosti vašeho počítače rozbalit všechny oddíly.Pokud jsou rozbaleny všechny oddíly, výstup se odrazí v sekci Výstup.
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.