Validação de parâmetro

A maioria das funções CRT aprimoradas para segurança e muitas que não são, validam seus parâmetros para coisas como verificar ponteiros para NULL, que inteiros se enquadram em um intervalo válido ou que os valores de enumeração são válidos. Se um parâmetro inválido for encontrado, o manipulador de parâmetro inválido será chamado.

Rotina do manipulador de parâmetro inválido

Quando uma função da Biblioteca de Runtime C detecta um parâmetro inválido, ela captura algumas informações sobre o erro e, em seguida, chama uma macro que envolve uma função de expedição de manipulador de parâmetro inválida. Que será um dos _invalid_parameter, _invalid_parameter_noinfo ou _invalid_parameter_noinfo_noreturn. Qual função de expedição é chamada depende se seu código é, respectivamente, um build de depuração, um build de varejo ou o erro não é considerado recuperável.

Em builds de depuração, a macro de parâmetro inválida geralmente gera uma asserção com falha e um ponto de interrupção do depurador antes que a função dispatch seja chamada. Quando o código é executado, a asserção pode ser relatada ao usuário em uma caixa de diálogo que tem "Anular", "Repetir" e "Continuar" ou opções semelhantes, dependendo do sistema operacional e da versão da biblioteca de runtime. Essas opções permitem que o usuário encesse imediatamente o programa, anexasse um depurador ou permitisse que o código existente continuasse sendo executado, o que chama a função dispatch.

A função de expedição do manipulador de parâmetro inválido chama o manipulador de parâmetro inválido atribuído no momento. Por padrão, o parâmetro inválido chama _invoke_watson, o que faz com que o aplicativo feche e gere um minispejo. Se habilitada pelo sistema operacional, uma caixa de diálogo pergunta ao usuário se deseja enviar o despejo de falha para a Microsoft para análise.

Você pode alterar esse comportamento usando as funções _set_invalid_parameter_handler ou_set_thread_local_invalid_parameter_handler para definir o manipulador de parâmetro inválido para sua própria função. Se a função que você especificar não terminar o aplicativo, o controle será retornado para a função que recebeu os parâmetros inválidos. No CRT, essas funções normalmente interromperão a execução da função, errno definirão como um código de erro e retornarão um código de erro. Em muitos casos, o valor errno e o valor de retorno são EINVALambos , para indicar um parâmetro inválido. Em alguns casos, um código de erro mais específico é retornado, tal como EBADF para um ponteiro de arquivo inválido passado como um parâmetro.

Para obter mais informações sobre errno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

Consulte também

Recursos de segurança no CRT
Arquivos CRT (Runtime C) e STL (Biblioteca Padrão) .lib do C++