Compartilhar via


_set_invalid_parameter_handler

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

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

Parâmetros

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

Valor de retorno

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

Comentários

Muitas funções de tempo de execução c verificam a validade de argumentos transmitidos a eles.Se um argumento inválido for passado, a função pode definir o errno o número de erro ou um código de erro de retorno.Em tais casos, também é chamado o manipulador de parâmetro inválido.Essa função permite que esse manipulador a ser definida para outra função.Apenas uma função pode ser especificada como o manipulador de argumento inválido ao mesmo tempo.

Quando a estrutura chama a função de parâmetro inválido, isso normalmente significa que ocorreu um erro não recuperável.Salve qualquer dado possa e, em seguida, anular a função de parâmetro inválido.Ele 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 de manipulador de parâmetro inválido deve 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 de argumento.O segundo argumento é o nome da função CRT que recebeu o argumento inválido.O terceiro argumento é o nome de arquivo na origem do CRT.O quarto argumento é a linha nesse arquivo.O último argumento é reservado.Todos os parâmetros têm o valor NULL , a menos que uma versão de depuração da biblioteca CRT é usada.

Requisitos

Rotina

Cabeçalho necessário

_set_invalid_parameter_handler

<stdlib.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Exemplo

No exemplo a seguir, um manipulador de erro de parâmetro inválido é usado para imprimir a função que recebeu o parâmetro inválido e o arquivo e a linha nas fontes do CRT.Quando a biblioteca de depuração CRT é usada, erros de parâmetro inválido também lançará uma asserção, que é desativada neste exemplo, usando 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 de segurança avançada de funções CRT

errno, _doserrno, _sys_errlist e _sys_nerr