Freigeben über


_msize_dbg

Berechnet die Größe eines Speicherblocks im Heap (nur Debugversion).

size_t _msize_dbg(
   void *userData,
   int blockType 
);

Parameter

  • userData
    Zeiger auf den Speicherblock, für den die Größe bestimmt.

  • Blocktyp
    Der Typ des angegebenen Speicherblocks: _CLIENT_BLOCK oder _NORMAL_BLOCK.

Rückgabewert

Bei erfolgreichem Abschluss _msize_dbg gibt die Größe (in Bytes) des angegebenen Speicherblocks zurück. Andernfalls wird NULL zurückgegeben.

Hinweise

_msize_dbg ist eine Debugversion der _msize-Funktion.Wenn _DEBUG nicht definiert ist, wird jeder Aufruf von _msize_dbg zu einem Aufruf von _msizereduziert._msize ableiten und _msize_dbg die Größe eines Speicherblocks im Basisheap, aber _msize_dbg fügt zwei Debugfeatures hinzu: Es schließt die Puffer auf beiden Seiten des Benutzers Teils des Speicherblocks in der zurückgegebenen Größe eines bestimmten berechnungen Größen und es können Typen zu blockieren.

Weitere Informationen zum Speicherblöcke in der Debugversion des Basisheaps zugeordnet, initialisiert und verwaltet werden, finden Sie unter Speicherverwaltung und Debugheap.Weitere Informationen zu den Typen von Zuordnungen blocks und wie diese verwendet werden, finden Sie unter Blocktypen auf dem Debugheap.Weitere Informationen über die Unterschiede zwischen den Aufrufen einer Funktion und ihrer heap Standard in einem Debugbuild Debugversion einer Anwendung finden Sie unter Verwenden der Debugversion für die Grundversion.

Diese Funktion untersucht den Parameter.Wenn memblock ein NULL-Zeiger ist, ruft _msize einen ungültigen Parameter für ein, wie in Parametervalidierungbeschrieben.Wenn der Fehler behandelt wurde, legt die Funktion errno zu EINVAL fest und gibt -1 zurück.

Anforderungen

Routine

Erforderlicher Header

_msize_dbg

<crtdbg.h>

Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.

Bibliotheken

Debugversionen von nur C .

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

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Debug- Routinen

_malloc_dbg