Partager via


_msize_dbg

Calcule la taille d'un bloc de mémoire dans la pile (version Debug uniquement).

size_t _msize_dbg( 
   void *userData, 
   int blockType  
);

Paramètres

  • userData
    Pointeur au bloc mémoire pour lequel il faut déterminer la taille.

  • Type de bloc
    Type du bloc de mémoire spécifié : _CLIENT_BLOCK ou _NORMAL_BLOCK.

Valeur de retour

Dans l'achèvement réussi, _msize_dbg renvoie la taille (en octets) du bloc mémoire spécifié ; sinon il renvoie NULL.

Notes

_msize_dbg est une version Debug de la fonction _msize. Lorsque _DEBUG n'est pas défini, chaque appel à _msize_dbg est réduit à un appel à _msize. A la fois _msize et _msize_dbg calculent la taille d'un bloc de mémoire dans la pile de base, mais _msize_dbg ajoute deux fonctionnalités de débogage : Cela inclut les mémoires tampons de chaque côté de la partie utilisateur du bloc de mémoire dans la taille retournée et permet des calculs de taille pour des types spécifiques de bloc.

Pour obtenir des informations sur la façon dont les blocs de mémoire sont alloués, initialisés, et gérés dans la version Debug du tas de base, consultez Détails du tas de débogage CRT. Pour obtenir des informations sur les types de bloc d'allocation et leur utilisation, consultez Types de blocs sur le tas de débogage. Pour obtenir des informations sur les différences entre appeler une fonction standard du tas et sa version Debug dans une version debug d'une application, consultez Versions Debug des fonctions d'allocation du tas.

Cette fonction valide son paramètre. Si memblock est un pointeur null _msize, le gestionnaire de paramètres non valides est appelé, comme décrit dans Validation de paramètre. Si l'erreur est gérée, cette fonction affecte errno à EINVAL et retourne -1.

Configuration requise

Routine

En-tête requis

_msize_dbg

<crtdbg.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

Bibliothèques

Seulement les versions debug des bibliothèques Runtime C.

Exemple

// 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 );
}

Sortie

Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Voir aussi

Référence

Routines de débogage

_malloc_dbg