Versions Debug des fonctions d'allocation du tas
Mise à jour : novembre 2007
Cette rubrique s'applique à :
Édition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
Natif uniquement |
|||
Standard |
Natif uniquement |
|||
Pro et Team |
Natif uniquement |
Légende du tableau :
Applicable |
|
Non applicable |
|
Commande ou commandes masquées par défaut. |
La bibliothèque Runtime C contient des versions Debug spéciales des fonctions d'allocation du tas. Ces fonctions utilisent les noms des versions Release, suivis de _dbg. Cette rubrique décrit les différences entre la version Release d'une fonction CRT et la version _dbg à partir d'exemples basés sur malloc et _malloc_dbg.
Lorsque _DEBUG est défini, le CRT mappe tous les appels malloc sur _malloc_dbg. Il est donc inutile de réécrire votre code en utilisant _malloc_dbg à la place de malloc pour bénéficier de ses avantages pendant le débogage.
Vous pouvez cependant appeler _malloc_dbg de façon explicite. Un appel explicite à _malloc_dbg présente en outre les avantages suivants :
suivi des allocations de type _CLIENT_BLOCK ;
stockage du fichier source et du numéro de la ligne où la demande d'allocation a été effectuée.
Si vous ne souhaitez pas convertir vos appels malloc à _malloc_dbg, vous pouvez obtenir les informations du fichier source en définissant _CRTDBG_MAP_ALLOC ; le préprocesseur mappera alors tous les appels à malloc directement sur _malloc_dbg au lieu d'utiliser un wrapper autour de malloc.
Pour effectuer le suivi des différents types d'allocations dans les blocs client, vous devez appeler _malloc_dbg directement et affecter au paramètre blockType la valeur _CLIENT_BLOCK.
Lorsque _DEBUG n'est pas défini, les appels à malloc ne sont pas perturbés, les appels à _malloc_dbg sont résolus en malloc, la définition de _CRTDBG_MAP_ALLOC est ignorée et les informations des fichiers sources qui se rapportent à la demande d'allocation ne sont pas fournies. Dans la mesure où malloc ne possède aucun paramètre de type de bloc, les demandes de types _CLIENT_BLOCK sont traitées comme des allocations standard.