Dela via


_msize_dbg

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

Se även

Felsökningsrutiner
_malloc_dbg