Sdílet prostřednictvím


_expand_dbg

Změní velikost určeného bloku paměti haldy rozbalením nebo smluvní blok (pouze ladicí verzi).

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

Parametry

  • userData
    Ukazatele na blok dříve přidělené paměti.

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

  • blockType
    Požádal o typu změněnou velikostí bloku: _CLIENT_BLOCK nebo _NORMAL_BLOCK.

  • filename
    Ukazatel myši na název zdrojového souboru, který požaduje rozšířit operaci nebo NULL.

  • linenumber
    Číslo zdrojového souboru, kde byla požadována operace rozbalení řádku nebo NULL.

filename a linenumber parametry jsou k dispozici pouze při _expand_dbg byla volána 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.Vzhledem k tomu, že paměť není přesunuta, 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 je s informacemi z operačního systému o povaze chyby.Další informace o errno naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.

Poznámky

_expand_dbg Funkce je ladicí verze _rozbalte funkce.Při _DEBUG není definována, každé volání _expand_dbg se snižuje o volání _expand.Obě _expand a _expand_dbg velikost bloku paměti haldy základní, ale _expand_dbg poskytuje několik funkcí pro ladění: vyrovnávací paměti na obou stranách uživatele část bloku zkouška na těsnost, parametr typu bloku ke sledování přidělení určité typy a filename/linenumber informace k určení původu požadavky na přidělení.

_expand_dbgZmění velikost paměti zadaný blok se trochu 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 je používán správce hald ladění propojení bloky paměti ladění a pro aplikaci s ladicími informacemi hlavičky a přepsat vyrovnávací paměti.Změnu velikosti lze provést rozbalení nebo smluvní původního bloku paměti._expand_dbgblok paměti, stejně jako se nepřesune _realloc_dbg funkce.

Při newSize je větší než původní blok velikost bloku paměti je rozbalen.Při rozšíření, pokud nelze rozbalit blok paměti pro požadovanou velikost NULL je vrácena.Při newSize je menší než původní blok velikost bloku paměti je smluvně, dokud není dosaženo novou velikost.

Informace o způsobu přidělování, inicializace a správy paměťových bloků v ladicí verzi základní haldy viz Podrobnosti haldy ladění CRT.Informace o typech bloku přidělení a jejich použití naleznete v tématu typů bloků na ladění haldy.Informace o rozdílech mezi volání funkce standardní haldy a jeho ladicí verzi v sestavení ladící verze aplikace naleznete v tématu Ladění verzí funkcí přidělení haldy.

Tato funkce ověřuje své parametry.Pokud memblock je ukazatel s hodnotou null, nebo pokud je větší než velikost _HEAP_MAXREQ, tato funkce vyvolá obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametru.Pokud smí provádění pokračovat, errno se nastaví na EINVAL a funkce vrátí NULL.

Požadavky

Rutina

Požadované záhlaví

_expand_dbg

<crtdbg.h>

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

Knihovny

Verze ladění pouze běhových knihoven 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 );
}
  

Komentář

Výstup tohoto programu závisí na schopnosti vašeho počítače Chcete-li rozbalit všechny oddíly.Pokud jsou rozbaleny všechny oddíly, výstup se projeví v sekci Výstup.

Ekvivalent v rozhraní .NET Framework

Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.

Viz také

Referenční dokumentace

Rutiny ladění

_malloc_dbg