Partager via


_msize_dbg

Calcule la taille d’un bloc de mémoire dans le tas (version de débogage uniquement).

Syntaxe

size_t _msize_dbg(
   void *userData,
   int blockType
);

Paramètres

userData
Pointeur désignant le bloc de mémoire duquel déterminer la taille.

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

Valeur retournée

Une fois l’achèvement réussi, _msize_dbg retourne la taille (en octets) du bloc de mémoire spécifié ; sinon, elle retourne NULL.

Notes

_msize_dbg est une version de débogage de la fonction _msize . Lorsqu’il _DEBUG n’est pas défini, chaque appel à est _msize_dbg réduit à un appel à _msize. _msize et _msize_dbg calculent toutes deux la taille d’un bloc de mémoire dans le tas de base, mais _msize_dbg ajoute deux fonctionnalités de débogage : elle inclut les mémoires tampons de chaque côté de la partie utilisateur du bloc de mémoire dans la taille retournée et elle permet de calculer la taille de types de blocs spécifiques.

Pour plus d’informations sur la façon dont les blocs de mémoire sont alloués, initialisés et gérés dans la version de débogage du tas de base, consultez les détails du tas de débogage CRT. Pour plus d’informations sur les types de blocs d’allocation et leur utilisation, consultez Types de blocs sur le tas de débogage. Pour plus d’informations sur les différences entre les fonctions de tas standard et les versions de débogage, consultez Les versions de débogage des fonctions d’allocation de tas.

Cette fonction valide son paramètre. S’il memblock s’agit d’un pointeur Null, _msize_dbg appelle un gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l’erreur est gérée, la fonction définit errno EINVAL et retourne -1 (18 446 744 073 709 551 615 non signé).

Spécifications

Routine En-tête requis
_msize_dbg <crtdbg.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Bibliothèques

Uniquement les versions de débogage 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

Voir aussi

Routines de débogage
_malloc_dbg