_CrtReportBlockType
Retourne le type/sous-type de bloc associé à un pointeur donné de bloc de tas de débogage.
int _CrtReportBlockType(
const void * pBlock
};
Paramètres
- pBlock
Pointeur vers un bloc valide de la pile de débogage.
Valeur de retour
Une fois passé un pointeur valide de la pile de débogage, la fonction _CrtReportBlockType renvoie le type et le sous-type du bloc sous forme d'un int. Une fois un pointeur invalide passé, la fonction renvoie -1.
Notes
Pour récupérer le type et sous-type renvoyé par _CrtReportBlockType, utiliser les macros _BLOCK_TYPE et _BLOCK_SUBTYPE (les deux définis dans Crtdbg.h) sur la valeur de retour.
Pour obtenir des informations sur les types de bloc d'allocation et leur utilisation, consultez Types de Blocs pour la pile de débogage.
Configuration requise
Routine |
En-tête requis |
---|---|
_CrtReportBlockType |
<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_crtreportblocktype.cpp
// compile with: /MDd
#include <malloc.h>
#include <stdio.h>
#include <crtdbg.h>
void __cdecl Dumper(void *ptr, void *)
{
int block = _CrtReportBlockType(ptr);
_RPT3(_CRT_WARN, "Dumper found block at %p: type %d, subtype %d\n", ptr,
_BLOCK_TYPE(block), _BLOCK_SUBTYPE(block));
}
void __cdecl LeakDumper(void *ptr, size_t sz)
{
int block = _CrtReportBlockType(ptr);
_RPT4(_CRT_WARN, "LeakDumper found block at %p:"
" type %d, subtype %d, size %d\n", ptr,
_BLOCK_TYPE(block), _BLOCK_SUBTYPE(block), sz);
}
int main(void)
{
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) |
_CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
_malloc_dbg(10, _NORMAL_BLOCK , __FILE__, __LINE__);
_malloc_dbg(10, _CLIENT_BLOCK | (1 << 16), __FILE__, __LINE__);
_malloc_dbg(20, _CLIENT_BLOCK | (2 << 16), __FILE__, __LINE__);
_malloc_dbg(30, _CLIENT_BLOCK | (3 << 16), __FILE__, __LINE__);
_CrtDoForAllClientObjects(Dumper, NULL);
_CrtSetDumpClient(LeakDumper);
}
Résultat de l'exemple
Dumper found block at 00314F78: type 4, subtype 3
Dumper found block at 00314F38: type 4, subtype 2
Dumper found block at 00314F00: type 4, subtype 1
Detected memory leaks!
Dumping objects ->
crt_crtreportblocktype.cpp(30) : {55} client block at 0x00314F78, subtype 3, 30 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
crt_crtreportblocktype.cpp(29) : {54} client block at 0x00314F38, subtype 2, 20 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
crt_crtreportblocktype.cpp(28) : {53} client block at 0x00314F00, subtype 1, 10 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD
crt_crtreportblocktype.cpp(27) : {52} normal block at 0x00314EC8, 10 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD
Object dump complete.