_calloc_dbg
Alloue plusieurs blocs de mémoire dans la pile avec l'espace supplémentaire pour un en-tête de débogage et les mémoires tampons de remplacement (version Debug uniquement).
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Paramètres
num
Nombre demandé de blocs de mémoire.size
Taille demandée de chaque bloc de mémoire (octets).blockType
Type de bloc mémoire demandé : _CLIENT_BLOCK ou _NORMAL_BLOCK.Pour obtenir des informations sur les types de bloc d'allocation et leur utilisation, consultezTypes de blocs pour la pile de débogage.
filename
Le pointeur du 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 paramètres filename et linenumber sont uniquement disponibles si _calloc_dbg a été appelé explicitement ou si la constante de préprocesseur _CRTDBG_MAP_ALLOC a été définie.
Valeur de retour
Dans l'achèvement réussi, le retour de cette fonction ou un pointeur vers la partie utilisateur du bloc de mémoire réaffecté en dernier, appelle la nouvelle fonction gestionnaire, ou renvoie NULL. Pour une description complète du comportement de retour, consultez la section Remarques. Pour plus d'informations sur la façon dont la nouvelle fonction gestionnaire est utilisée, consultez la fonction calloc.
Notes
_calloc_dbg est une version Debug de la fonction calloc. Lorsque _DEBUG n'est pas défini, chaque appel à _calloc_dbg est réduit à un appel à calloc. A la fois calloc et _calloc_dbg allouent des blocs mémoire de num dans la pile 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 à déterminer les fuites.
Un paramètre de type bloc pour suivre les types spécifiques d'allocation.
informations de filename/linenumber pour déterminer l'origine des demandes d'allocation.
_calloc_dbg alloue chaque bloc mémoire avec légèrement plus d'espace que le sizedemandé. L'espace supplémentaire est utilisé par le gestionnaire du tas de débogage pour lier les blocs de mémoire de débogage, pour fournir à l'application les informations d'en-tête du débogage et pour remplacer des 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 avec 0xFD.
_calloc_dbg définit errno à ENOMEM si une allocation de mémoire échoue; EINVAL est renvoyé si la quantité de mémoire nécessaire (charge mémoire y compris mentionnée précédemment) dépasse _HEAP_MAXREQ. Pour plus d'informations sur ces codes de retour et autres, consultez errno, _doserrno, _sys_errlist et _sys_nerr.
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 différences entre appeler une fonction standard en pile contre sa version Debug dans une version debug d'une application, consultez Versions Debug des fonctions d'allocation du tas.
Configuration requise
Routine |
En-tête requis |
---|---|
_calloc_dbg |
<crtdbg.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.
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 );
}
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.