Partilhar via


Itens de CRT

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Somente nativo

Padrão

Somente nativo

PRO e equipe

Somente nativo

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

O arquivo de cabeçalho CRTDBG.H define o Macros _ASSERT e _ASSERTE para verificação de declaração.

Macro

Resultado

_ASSERT

Se a expressão especificada for avaliada como falso, o arquivo de nome e o número de linha do _ASSERT.

_ASSERTE

Same sistema autônomo _ASSERT, além de uma representação de seqüência da expressão ou w sistema autônomo sistema autônomo serted.

_ASSERTE é mais eficiente porque ele informa a expressão confirmada aconteceu seja falso. Isso pode ser o suficiente para identificar o problema sem referência ao código-fonte.No entanto, a versão de depurar de seu aplicativo irá conter uma constante de seqüência de caracteres para cada expressão declarada usando _ASSERTE. Se você usar muitos _ASSERTE macros, essas expressões de seqüência de caracteres ocupam uma quantidade significativa de memória. Se o que prova que é um problema, use _ASSERT para economizar memória.

Quando _DEBUG é definida, a _ASSERTE macro é definida da seguinte forma:

#define _ASSERTE(expr) \
   do { \
      if (!(expr) && (1 == _CrtDbgReport( \
         _CRT_ASSERT, __FILE__, __LINE__, #expr))) \
         _CrtDbgBreak(); \
   } while (0)

Se a expressão confirmada for avaliada como falso, _CrtDbgReport é chamado para relatar o erro de declaração (usando uma caixa de diálogo de mensagem por padrão).Se você optar por Tente novamente na caixa de diálogo da mensagem, _CrtDbgReport retorna 1 e _CrtDbgBreak chama o depurador por meio de DebugBreak.

Substituindo printf

_ASSERTE permite que você substitua o código a seguir:

#ifdef _DEBUG
   if ( someVar > MAX_SOMEVAR )
      printf( "OVERFLOW! In NameOfThisFunc( ),
               someVar=%d, otherVar=%d.\n",
               someVar, otherVar );
#endif

com uma única demonstrativo:

_ASSERTE(someVar <= MAX_SOMEVAR);

Verificando se há corrupção de heap

O exemplo a seguir utiliza _CrtCheckMemory para verificar se há corrupção de pilha:

_ASSERTE(_CrtCheckMemory());

Verificando a validade do ponteiro

O exemplo a seguir utiliza _CrtIsValidPointer para verificar se a faixa de memória especificado é válida para leitura ou gravação.

_ASSERTE(_CrtIsValidPointer( address, size, TRUE );

O exemplo a seguir utiliza _CrtIsValidHeapPointer para verificar um ponteiro aponta para a memória no heap de local (o heap criado e gerenciado por esta instância de C em time de execução biblioteca — uma DLL pode ter sua própria instância da biblioteca e, portanto, sua própria pilha fora do heap do aplicativo).Essa afirmação não captura apenas nula ou out-of-bounds endereços, mas também os ponteiros para variáveis estáticas, variáveis de pilha e nenhuma Outros memória não-local.

_ASSERTE(_CrtIsValidPointer( myData );

Verificando um bloco de memória

O exemplo a seguir utiliza _CrtIsMemoryBlock para verificar se um bloco de memória no heap de local e tem um tipo válido de bloco.

_ASSERTE(_CrtIsMemoryBlock (myData, size, &requestNumber, &filename, &linenumber));

Consulte também

Conceitos

Declarações