_expand_dbg
Ridimensiona un blocco di memoria specificato nell'heap espandendo o contraendo il blocco (versione di debug solo).
void *_expand_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int linenumber
);
Parametri
userData
Puntatore in precedenza al blocco di memoria allocata.newSize
Nuova dimensione richiesta dal blocco (in byte).blockType
tipo richiesto per il blocco ridimensionato: _CLIENT_BLOCKo _NORMAL_BLOCK.filename
Il puntatore sul nome del file di origine che ha richiesto espandere l'operazione oppure NULL.linenumber
Numero di riga nel file di origine in cui l'operazione di espandere è stata richiesta o NULL.
filename e linenumber i parametri sono disponibili solo quando _expand_dbg è stato chiamato in modo esplicito o _CRTDBG_MAP_ALLOC la costante del preprocessore è stata definita.
Valore restituito
Al termine, _expand_dbg restituisce un puntatore al blocco di memoria ridimensionato.Poiché la memoria non viene spostata, l'indirizzo è lo stesso di userData.Se si è verificato un errore o il blocco non può essere espanso alla dimensione richiesta, restituisce NULL.Se si verifica un errore, errno è con informazioni dal sistema operativo sulla natura dell'errore.Per ulteriori informazioni su errno, vedere errno, _doserrno, _sys_errlist e _sys_nerr.
Note
_expand_dbgla funzione è una versione di debug _espandere funzione.quando _DEBUG non è definita, ogni chiamata a _expand_dbgè stato ridotto a una chiamata a _expand.entrambi _expande _expand_dbgper ridimensionare un blocco di memoria nell'heap di base, ma _expand_dbg appropriata diverse funzionalità di debug: buffer presenti da entrambi i lati della parte dell'utente di blocco da verifica delle perdite, un parametro di tipo blocco per tenere traccia dei tipi specifici di allocazione e filenameolinenumber informazioni per determinare l'origine delle richieste di allocazione.
_expand_dbg ridimensiona il blocco di memoria specificato con leggermente più spazio rispetto richiesto newSize.newSize potrebbe essere maggiore o minore della dimensione originariamente il blocco di memoria allocata.Lo spazio aggiuntivo viene utilizzato dall'amministratore dell'heap di debug per collegare i blocchi di memoria di debug e per fornire l'applicazione con informazioni di intestazione di debug e sovrascrivere i buffer.Il ridimensionamento viene soddisfatto espandendo o contraendo il blocco di memoria originale._expand_dbg non consente di spostare il blocco di memoria, come in l _realloc_dbg funzione.
quando newSize è maggiore delle dimensioni di un blocco originale, il blocco di memoria viene espansa.Durante l'espansione, se il blocco di memoria non può essere espanso per adattarsi alla dimensione richiesta, NULL viene restituito.quando newSize è minore della dimensione di un blocco originale, il blocco di memoria è contratta fino a ottenere la nuova dimensione.
Per informazioni su come i blocchi di memoria vengono allocati, inizializzati e vengono gestiti nella versione di debug dell'heap di base, vedere Gestione della memoria e heap di debug.Per informazioni sui tipi di blocchi di allocazione e come vengono utilizzati, vedere Tipi di blocchi sull'heap di debug.Per informazioni sulle differenze tra chiamare una funzione standard dell'heap e la relativa versione di debug in una build di debug di un'applicazione, vedere Utilizzando la versione di debug nella versione di base.
Questa funzione convalida dei parametri.se memblock è un puntatore null, o se la dimensione è maggiore di _HEAP_MAXREQ, questa funzione viene richiamato un gestore non valido di parametro, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, errno è impostato su EINVAL e restituisce un valore di funzione NULL.
Requisiti
routine |
Intestazione di associazione |
---|---|
_expand_dbg |
<crtdbg.h> |
Per ulteriori informazioni sulla compatibilità, vedere compatibilità nell'introduzione.
Librerie
versioni di debug di Librerie di runtime del linguaggio C solo.
Esempio
// 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 );
}
Commento
L'output di questo programma dipende dalla capacità del computer di espandere tutte le sezioni.Se tutte le sezioni sono espanse, l'output sarà riflesso nella sezione di output.
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.