Partilhar via


Declarações de CRT

This topic applies to:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Pro, Premium e Ultimate

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

CRTDBG.Arquivo de cabeçalho h define o macros _ASSERT e _ASSERTE de verificação de declaração.

Macro

Result

_ASSERT

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

_ASSERTE

Mesmo que _ASSERT, além de uma representação de seqüência da expressão que foi declarada.

_ASSERTEé mais eficiente porque ele informa que a expressão de confirmado representavam falso. Isso pode ser suficiente para identificar o problema sem fazer referência ao código-fonte. No entanto, a versão de depuração do aplicativo 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 para ser um problema, use _ASSERT para economizar memória.

Quando _ Debug for definido, o _ASSERTE macro é definida da seguinte maneira:

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

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

Substituindo printf

_ASSERTEpermite 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 instrução:

_ASSERTE(someVar <= MAX_SOMEVAR);

Verificação de corrupção de Heap

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

_ASSERTE(_CrtCheckMemory());

Verificando a validade do ponteiro

O exemplo a seguir usa _CrtIsValidPointer para verificar se um intervalo determinado de memória é válido para leitura ou gravação.

_ASSERTE(_CrtIsValidPointer( address, size, TRUE );

O exemplo a seguir usa _CrtIsValidHeapPointer para verificar um ponteiro aponta para a memória no heap de local (pilha criado e gerenciado por esta instância da biblioteca c run-time — 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 endereços out-of-bounds, mas também os ponteiros para variáveis estáticas, variáveis de pilha e nenhuma outra memória não-local.

_ASSERTE(_CrtIsValidPointer( myData );

A verificação de um bloco de memória

O exemplo a seguir usa _CrtIsMemoryBlock para verificar que um bloco de memória heap local e possui um tipo de bloco válido.

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

Consulte também

Conceitos

Declarações