_msize_dbg
Berechnet die Größe eines Speicherblocks im Heap (nur Debugversion).
Syntax
size_t _msize_dbg(
void *userData,
int blockType
);
Parameter
userData
Zeiger zu dem Speicherblock, für den die Größen bestimmt werden soll.
blockType
Typ des angegebenen Speicherblocks: _CLIENT_BLOCK
oder _NORMAL_BLOCK
.
Rückgabewert
Gibt nach erfolgreichem Abschluss _msize_dbg
die Größe (in Byte) des angegebenen Speicherblocks zurück; andernfalls wird sie zurückgegeben NULL
.
Hinweise
_msize_dbg
ist eine Debugversion der _msize
-Funktion. Wenn _DEBUG
sie nicht definiert ist, wird jeder Anruf _msize_dbg
auf einen Anruf reduziert _msize
. _msize
und _msize_dbg
berechnen die Größe eines Speicherblocks im Basisheap, jedoch fügt _msize_dbg
zwei Debugfunktionen hinzu: Es schließt die Puffer auf beiden Seiten des Benutzerteils des Speicherblocks in der zurückgegebenen Größe ein und ermöglicht Größenberechnungen für bestimmte Blocktypen.
Informationen dazu, wie Speicherblöcke in der Debugversion des Basis heap zugeordnet, initialisiert und verwaltet werden, finden Sie unter CRT Debug Heap Details. Informationen zu den Zuordnungsblocktypen und deren Verwendung finden Sie unter "Typen von Blöcken" im Debug-Heap. Informationen zu den Unterschieden zwischen Standard-Heap-Funktionen und den Debugversionen finden Sie unter Debugversionen von Heap-Zuordnungsfunktionen.
Diese Funktion überprüft seine Parameter. Wenn memblock
es sich um einen Nullzeiger handelt, _msize_dbg
wird ein ungültiger Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn der Fehler behandelt wird, legt errno
die Funktion -1 fest EINVAL
und gibt -1 zurück (18.446.744.073.709.551.615 nicht signiert).
Anforderungen
Routine | Erforderlicher Header |
---|---|
_msize_dbg |
<crtdbg.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Libraries
Nur Debugversionen von C-Laufzeitbibliotheken
Beispiel
// 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 );
}
Output
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320