Compartilhar via


_set_invalid_parameter_handler

Define uma função a ser chamada quando o CRT detecta um argumento inválido.

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

Parâmetros

  • [entrada] pNew
    O ponteiro de função para o novo manipulador inválido do parâmetro.

Valor de retorno

Um ponteiro para o manipulador inválido de parâmetro antes de chamar.

Comentários

Muitas funções de tempo de execução C verifica a validade dos argumentos passados a ele. Se um argumento inválido for passado, a função pode definir o número de erro de errno ou retornar um código de erro. Nesses casos, o manipulador inválido do parâmetro também é chamado. Esta função permite que o manipulador é definido como outra função. Uma função só pode ser especificada como o manipulador inválido do argumento de cada vez.

Quando a estrutura chama a função inválido do parâmetro, geralmente significa que um erro não recuperável aconteceu. A função inválido do parâmetro deve salvar todos os dados que possa e como nulo em. Não deve retornar o controle para a função principal a menos que você tenha certeza de que o erro é recuperável.

A função inválido de manipulador de parâmetro deverá ter o seguinte protótipo:

void _invalid_parameter(
   const wchar_t * expression,
   const wchar_t * function, 
   const wchar_t * file, 
   unsigned int line,
   uintptr_t pReserved
);

O primeiro argumento é a expressão do argumento. O segundo argumento é o nome da função de CRT que recebeu o argumento inválido. O terceiro argumento é o nome de arquivo na origem de CRT. O quarto argumento é a linha nesse arquivo. O último argumento é permitido. Todos os parâmetros têm o valor NULL a menos que uma versão de depuração da biblioteca de CRT é usada.

Requisitos

Rotina

Cabeçalho necessário

_set_invalid_parameter_handler

<stdlib.h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.

Exemplo

No exemplo a seguir, um manipulador de erro inválido do parâmetro é usado para imprimir a função que recebeu o parâmetro inválido e o arquivo e a linha em fontes de CRT. Quando a biblioteca de CRT de depuração é usada, os erros inválidos de parâmetro também lança uma asserção, que está desabilitada neste exemplo que usa _CrtSetReportMode.

// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>  // For _CrtSetReportMode

void myInvalidParameterHandler(const wchar_t* expression,
   const wchar_t* function, 
   const wchar_t* file, 
   unsigned int line, 
   uintptr_t pReserved)
{
   wprintf(L"Invalid parameter detected in function %s."
            L" File: %s Line: %d\n", function, file, line);
   wprintf(L"Expression: %s\n", expression);
   abort();
}


int main( )
{
   char* formatString;

   _invalid_parameter_handler oldHandler, newHandler;
   newHandler = myInvalidParameterHandler;
   oldHandler = _set_invalid_parameter_handler(newHandler);

   // Disable the message box for assertions.
   _CrtSetReportMode(_CRT_ASSERT, 0);

   // Call printf_s with invalid parameters.

   formatString = NULL;
   printf(formatString);
}
       

Consulte também

Referência

Versões aprimoradas de segurança de funções CRT

errno, _doserrno, _sys_errlist e _sys_nerr