_calloc_dbg

Alloue des blocs de mémoire dans le tas avec un espace supplémentaire pour un en-tête de débogage et remplace les mémoires tampons (version de débogage uniquement).

Syntaxe

void *_calloc_dbg(
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber
);

Paramètres

number
Nombre de blocs de mémoire demandé.

size
Taille de chaque bloc de mémoire demandée (octets).

blockType
Type de bloc de mémoire demandé : _CLIENT_BLOCK ou _NORMAL_BLOCK.

Pour plus d’informations sur les types de blocs d’allocation et leur utilisation, consultez Types de blocs sur le tas de débogage.

filename
Pointeur vers le nom du fichier source qui a demandé l'opération d'allocation ou NULL.

linenumber
Numéro de ligne dans le fichier source où l'opération d'allocation a été demandée ou NULL.

Les filename paramètres et linenumber les paramètres sont disponibles uniquement lorsqu’ils ont été appelés explicitement ou si _calloc_dbg la _CRTDBG_MAP_ALLOC constante de préprocesseur a été définie.

Valeur retournée

Une fois l’opération réussie, cette fonction retourne un pointeur vers la partie utilisateur du dernier bloc de mémoire alloué, appelle la fonction du nouveau gestionnaire ou retourne NULL. Pour obtenir une description complète du comportement de retour, voir la section Notes. Pour plus d’informations sur l’utilisation de la nouvelle fonction de gestionnaire, consultez la calloc fonction.

Notes

_calloc_dbg est une version de débogage de la calloc fonction. Lorsqu’il _DEBUG n’est pas défini, chaque appel à est _calloc_dbg réduit à un appel à calloc. calloc et _calloc_dbg allouent number blocs de mémoire dans le tas de base, mais _calloc_dbg propose plusieurs fonctionnalités de débogage :

  • Mémoires tampons de chaque côté de la partie utilisateur du bloc pour vérifier la présence de fuites

  • Paramètre de type de bloc pour effectuer le suivi des types d’allocation spécifiques

  • Informations filename/linenumber pour déterminer l’origine des demandes d’allocation

_calloc_dbg alloue chaque bloc de mémoire avec un peu plus d’espace que la valeur size demandée. L’espace supplémentaire est utilisé par le gestionnaire de tas de débogage pour lier les blocs de mémoire de débogage et fournir à l’application des informations d’en-tête de débogage et remplacer les mémoires tampons. Lorsque le bloc est alloué, la partie utilisateur du bloc est remplie avec la valeur 0xCD, et chacune des mémoires tampons de remplacement est remplie de 0xFD.

_calloc_dbg affecte à errno la valeur ENOMEM si une allocation de mémoire échoue ; la valeur EINVAL est retournée si la quantité de mémoire nécessaire (y compris la surcharge mentionnée précédemment) dépasse _HEAP_MAXREQ. Pour plus d’informations sur ce code et d’autres codes d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

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 différences entre l’appel d’une fonction de tas standard et la version de débogage, consultez Les versions de débogage des fonctions d’allocation de tas.

Spécifications

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

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

Exemple

// crt_callocd.c
// This program uses _calloc_dbg to allocate space for
// 40 long integers. It initializes each element to zero.

#include <stdio.h>
#include <malloc.h>
#include <crtdbg.h>

int main( void )
{
    long *bufferN, *bufferC;

    // Call _calloc_dbg to include the filename and line number
    // of our allocation request in the header and also so we can
    // allocate CLIENT type blocks specifically
    bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
    bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );
    if( bufferN != NULL && bufferC != NULL )
        printf( "Allocated memory successfully\n" );
    else
        printf( "Problem allocating memory\n" );

    / _free_dbg must be called to free CLIENT type blocks
    free( bufferN );
    _free_dbg( bufferC, _CLIENT_BLOCK );
}
Allocated memory successfully

Voir aussi

Routines de débogage
calloc
_malloc_dbg
_DEBUG