Sdílet prostřednictvím


_expand_dbg

Změní velikost zadaného bloku paměti v haldě rozšířením nebo uzavřením bloku (pouze ladicí verze).

Syntaxe

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

Parametry

userData
Ukazatel na dříve přidělený blok paměti.

newSize
Požadovaná nová velikost bloku (v bajtech).

blockType
Požadovaný typ pro blok se změněnou velikostí: _CLIENT_BLOCK nebo _NORMAL_BLOCK.

filename
Ukazatel na název zdrojového souboru, který požadoval operaci rozbalení nebo NULL.

lineNumber
Číslo řádku ve zdrojovém souboru, kde byla požadována operace rozbalení nebo NULL.

Parametry filename jsou lineNumber k dispozici pouze v případech, kdy _expand_dbg byla volána explicitně nebo byla definována konstanta preprocesoru _CRTDBG_MAP_ALLOC .

Vrácená hodnota

Po úspěšném dokončení _expand_dbg vrátí ukazatel na změněný blok paměti. Vzhledem k tomu, že se paměť nepřesune, adresa je stejná jako userData. Pokud došlo k chybě nebo se blok nepodařilo rozšířit na požadovanou velikost, vrátí NULLse . Pokud dojde k selhání, errno obsahuje informace z operačního systému o povaze selhání. Další informace o errno, vizerrno , _doserrno, _sys_errlist, a _sys_nerr.

Poznámky

Funkce _expand_dbg je ladicí verze funkce _expand . Pokud _DEBUG není definováno, každé volání _expand_dbg se sníží na volání _expand. Velikost _expand bloku paměti v základní haldě, ale _expand_dbg vyhovuje několika funkcím ladění: vyrovnávací paměti na obou stranách bloku, které se mají otestovat na nevracení, parametr typu bloku pro sledování konkrétních typů přidělení a filename/lineNumber informace pro určení původu žádostí o přidělení._expand_dbg

_expand_dbg změní velikost zadaného bloku paměti o trochu více místa, než je požadováno newSize. newSize může být větší nebo menší než velikost původně přiděleného bloku paměti. Další místo používá správce haldy ladění k propojení bloků paměti ladění a k poskytnutí aplikace informace hlavičky ladění a přepsání vyrovnávací paměti. Změna velikosti se provádí rozšířením nebo uzavřením původního bloku paměti. _expand_dbg nepřesune blok paměti, stejně jako funkce _realloc_dbg .

Pokud newSize je větší než původní velikost bloku, blok paměti se rozbalí. Pokud během rozšíření nelze rozšířit blok paměti tak, aby vyhovoval požadované velikosti, NULL vrátí se. Pokud newSize je menší než původní velikost bloku, bude blok paměti kontraktován, dokud nebude získána nová velikost.

Informace o přidělování, inicializaci a správě bloků paměti ve verzi ladění základní haldy naleznete v podrobnostech haldy ladění CRT. Informace o typech bloků přidělení a jejich použití najdete v tématu Typy bloků v haldě ladění. Informace o rozdílech mezi standardními funkcemi haldy a ladicí verze naleznete v tématu Ladění verzí funkcí přidělení haldy.

Tato funkce ověří své parametry. Pokud userData je ukazatel null nebo pokud je velikost větší _HEAP_MAXREQ, 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.

Požadavky

Rutina Požadovaný hlavičkový soubor
_expand_dbg <crtdbg.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Ladění pouze verzí knihoven runtime jazyka C.

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 );
}
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _expand_dbg of 1 more long: 164

Komentář

Výstup tohoto programu závisí na schopnosti počítače rozbalit všechny oddíly. Pokud jsou všechny oddíly rozbalené, výstup se projeví v části Výstup.

Viz také

Rutiny ladění
_malloc_dbg