Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wijzigt de grootte van een opgegeven blok geheugen in de heap door het blok uit te vouwen of te verkleinen (alleen foutopsporingsversie).
Syntaxis
void *_expand_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int lineNumber
);
Parameterwaarden
userData
Aanwijzer naar het eerder toegewezen geheugenblok.
newSize
Nieuwe grootte aangevraagd voor het blok (in bytes).
blockType
Aangevraagd type voor formaat van blok: _CLIENT_BLOCK of _NORMAL_BLOCK.
filename
Wijs de naam aan van het bronbestand waarvoor de uitbreidingsbewerking is aangevraagd of NULL.
lineNumber
Regelnummer in het bronbestand waar de uitvouwbewerking is aangevraagd of NULL.
De filename parameters lineNumber en parameters zijn alleen beschikbaar wanneer _expand_dbg deze expliciet zijn aangeroepen of als de _CRTDBG_MAP_ALLOC preprocessorconstante is gedefinieerd.
Retourwaarde
Bij een geslaagde voltooiing _expand_dbg wordt een aanwijzer geretourneerd naar het geheugenblok met de grootte. Omdat het geheugen niet wordt verplaatst, is het adres hetzelfde als de userData. Als er een fout is opgetreden of het blok niet kan worden uitgebreid naar de aangevraagde grootte, wordt deze geretourneerd NULL. Als er een fout optreedt, errno vindt u informatie van het besturingssysteem over de aard van de fout. Voor meer informatie over errno, zie errno, , _doserrno, , en _sys_errlist_sys_nerr.
Opmerkingen
De _expand_dbg functie is een foutopsporingsversie van de _expand functie. Wanneer _DEBUG niet is gedefinieerd, wordt elke aanroep _expand_dbg beperkt tot een aanroep naar _expand. Zowel _expand als _expand_dbg het formaat van een geheugenblok in de basis-heap wijzigen, maar _expand_dbg biedt plaats aan verschillende foutopsporingsfuncties: buffers aan beide zijden van het blok om te testen op lekken, een bloktypeparameter voor het bijhouden van specifieke toewijzingstypen en filename/lineNumber informatie om de oorsprong van toewijzingsaanvragen te bepalen.
_expand_dbg wijzigt de grootte van het opgegeven geheugenblok met iets meer ruimte dan het aangevraagde newSize.
newSize kan groter of kleiner zijn dan de grootte van het oorspronkelijk toegewezen geheugenblok. De extra ruimte wordt gebruikt door de heap-manager voor foutopsporing om de foutopsporingsgeheugenblokken te koppelen en om de toepassing informatie over de foutopsporingsheader te bieden en buffers te overschrijven. Het formaat wordt bereikt door het oorspronkelijke geheugenblok uit te breiden of te verkleinen.
_expand_dbg verplaatst het geheugenblok niet, net als de _realloc_dbg functie.
Wanneer newSize deze groter is dan de oorspronkelijke blokgrootte, wordt het geheugenblok uitgevouwen. Als het geheugenblok tijdens een uitbreiding niet kan worden uitgebreid om de aangevraagde grootte aan te bieden, NULL wordt deze geretourneerd. Wanneer newSize het blok kleiner is dan de oorspronkelijke blokgrootte, wordt het geheugenblok gecontracteerd totdat de nieuwe grootte wordt verkregen.
Zie CRT-foutopsporingsdetails voor informatie over hoe geheugenblokken worden toegewezen, geïnitialiseerd en beheerd in de foutopsporingsversie van de basis-heap. Zie Typen blokken in de heap voor foutopsporing voor informatie over de typen toewijzingsblokken en hoe ze worden gebruikt. Zie Foutopsporingsversies van heap-toewijzingsfuncties voor informatie over de verschillen tussen standaard-heap-functies en foutopsporingsversies.
Met deze functie worden de parameters gevalideerd. Als userData een null-aanwijzer is, of als de grootte groter is dan _HEAP_MAXREQ, roept deze functie een ongeldige parameterhandler aan, zoals beschreven in parametervalidatie. Als de uitvoering mag worden voortgezet, errno is ingesteld op EINVAL en retourneert NULLde functie.
Requirements
| Routine | Vereiste header |
|---|---|
_expand_dbg |
<crtdbg.h> |
Zie Compatibiliteit voor meer compatibiliteitsinformatie.
Libraries
Fouten opsporen in versies van C-runtimebibliotheken alleen.
Example
// 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
Comment
De uitvoer van dit programma is afhankelijk van de mogelijkheid van uw computer om alle secties uit te vouwen. Als alle secties zijn uitgevouwen, wordt de uitvoer weergegeven in de sectie Uitvoer.