Validação do parâmetro
A maioria das funções CRT com segurança aprimorada, e muitas que não são, validam seus parâmetros para coisas como verificar ponteiros para NULL
, que os inteiros se enquadram em um intervalo válido ou se os valores de enumeração são válidos. Se um parâmetro inválido é encontrado, o manipulador de parâmetro inválido é chamado.
Rotina de manipulador de parâmetro inválida
Quando uma função da Biblioteca de Runtime do C detecta um parâmetro inválido, ela captura algumas informações sobre o erro e chama uma macro que encapsula uma função de expedição de manipulador de parâmetro inválido. Que será um dos , _invalid_parameter
_invalid_parameter_noinfo
, ou _invalid_parameter_noinfo_noreturn
. A função de expedição chamada dependerá do código ser, respectivamente, um build de depuração, um build comercial ou se o erro não for considerado recuperável.
Em builds de depuração, a macro de parâmetro inválido geralmente vai gerar uma instrução assert com falha e um ponto de interrupção do depurador antes que a função de expedição 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 que dependem do sistema operacional e da versão do CRT. Com essas opções o usuário poderá terminar imediatamente o programa, anexar um depurador ou permitir que o código existente continue em execução, o que chamará a função de expedição.
A função de expedição do manipulador de parâmetro inválido chamará o manipulador de parâmetro inválido atribuído no momento. Por padrão, o parâmetro inválido chama _invoke_watson
, fazendo com que o aplicativo seja fechado e gere um minidespejo. Se habilitada pelo sistema operacional, uma caixa de diálogo perguntará ao usuário se deseja enviar o despejo de memória 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 especificada não encerrar o aplicativo, o controle será retornado para a função que recebeu os parâmetros inválidos. No CRT, essas funções normalmente param a execução de funções, definem errno
para um código de erro e retornam um código de erro. Em muitos casos, o valor errno
e o valor retornado são ambos EINVAL
, indicando 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
o , consulteerrno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Confira também
Recursos de segurança no CRT
Arquivos .lib
de runtime do C (CRT) e Biblioteca Padrão (STL) do C++