_CrtReportBlockType
Retourne l'type de bloc/sous-type associés à un pointeur donné de bloc de tas de débogage.
int _CrtReportBlockType(
const void * pBlock
};
Paramètres
- pBlock
Pointeur vers un bloc valide du tas de débogage.
Valeur de retour
Une fois passé un pointeur valide du tas de débogage, la fonction d' _CrtReportBlockType retourne un type de bloc et sous-type sous la forme d' int.Une fois passé un pointeur valide, que la fonction retourne -1.
Notes
Pour récupérer le type et sous-type retourné par _CrtReportBlockType, utilise les macros _BLOCK_TYPE et _BLOCK_SUBTYPE (les deux définis dans Crtdbg.h) sur la valeur de retour.
Pour plus d'informations sur les types de bloc d'allocation et leur utilisation, consultez types de blocs sur le tas de débogage.
Configuration requise
routine |
en-tête requis |
---|---|
_CrtReportBlockType |
<crtdbg.h> |
Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.
bibliothèques
Versions debug de Bibliothèques runtime C uniquement.
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.