Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Beräknar storleken på ett minnesblock i heapen (endast felsökningsversion).
Syntax
size_t _msize_dbg(
void *userData,
int blockType
);
Parameterar
userData
Pekare till minnesblocket för vilket storleken ska bestämmas.
blockType
Typ av angivet minnesblock: _CLIENT_BLOCK eller _NORMAL_BLOCK.
Returvärde
Vid slutförande _msize_dbg returnerar storleken (i byte) för det angivna minnesblocket. Annars returneras NULL.
Anmärkningar
_msize_dbg är en felsökningsversion av _msize funktionen. När _DEBUG inte har definierats reduceras varje anrop till _msize_dbg till ett anrop till _msize. Både _msize och _msize_dbg beräknar storleken på ett minnesblock i bashögen, men _msize_dbg lägger till två felsökningsfunktioner: Den innehåller buffertar på vardera sidan av användardelen av minnesblocket i den returnerade storleken och tillåter storleksberäkningar för specifika blocktyper.
Information om hur minnesblock allokeras, initieras och hanteras i felsökningsversionen av bashögen finns i information om CRT-felsöknings heap. Information om typer av allokeringsblock och hur de används finns i Typer av block på felsöknings-heapen. Information om skillnaderna mellan standard-heap-funktioner och felsökningsversionerna finns i Felsöka versioner av heap-allokeringsfunktioner.
Den här funktionen validerar dess parameter. Om memblock är en null-pekare _msize_dbg anropar en ogiltig parameterhanterare enligt beskrivningen i Parameterverifiering. Om felet hanteras anger errnoEINVAL och returnerar funktionen -1 (18 446 744 073 709 551 615 osignerade).
Kravspecifikation
| Rutin | Obligatoriskt huvud |
|---|---|
_msize_dbg |
<crtdbg.h> |
Mer kompatibilitetsinformation finns i Kompatibilitet.
Libraries
Felsöka endast versioner av C-körningsbibliotek .
Example
// crt_msize_dbg.c
// compile with: /MTd
/*
* 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 _realloc_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, *newbuffer;
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 );
/*
* Reallocate the buffer using _realloc_dbg and show the new size
*/
newbuffer = _realloc_dbg( buffer, size + (40 * sizeof(long)), _NORMAL_BLOCK, __FILE__, __LINE__ );
if( newbuffer == NULL )
exit( 1 );
buffer = newbuffer;
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _realloc_dbg of 40 more longs: %u\n", size );
free( buffer );
exit( 0 );
}
Utgång
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320