Validação do parâmetro

A maioria das funções crt aprimoradas pela segurança, e muitas que não são, validam seus parâmetros para coisas como pontos de verificação para NULL, que os 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 é encontrado, o manipulador de parâmetro inválido é chamado.

Rotina inválida do manipulador de parâmetros

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_noinfoou _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 declaração pode ser relatada ao usuário em uma caixa de diálogo que tem "Abortar", "Repetir" e "Continuar" ou opções semelhantes que dependem do sistema operacional e da versão 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 à 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 sobreerrno, consulteerrno, _doserrnoe _sys_errlist_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++