Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A maioria das funções CRT com segurança aprimorada, e muitas que não têm, validam os seus parâmetros para verificar coisas como ponteiros para NULL, se inteiros caem dentro de um intervalo válido ou se os valores de enumeração são válidos. Se um parâmetro inválido for encontrado, o manipulador de parâmetros inválido será chamado.
Rotina inválida do manipulador de parâmetros
Quando uma função C Runtime Library deteta um parâmetro inválido, ela captura algumas informações sobre o erro e, em seguida, chama uma macro que encapsula uma função de despacho de manipulador de parâmetros inválida. Que será um dos _invalid_parameter, _invalid_parameter_noinfoou _invalid_parameter_noinfo_noreturn. A função de despacho chamada depende de o seu código ser uma compilação de depuração, uma compilação de produção ou de o erro não ser considerado recuperável.
Em compilações 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 "Abortar", "Repetir" e "Continuar" ou opções semelhantes que dependem do sistema operacional e da versão CRT. Essas opções permitem que o usuário encerre imediatamente o programa, anexe um depurador ou deixe o código existente continuar a ser executado, o que chama a função de despacho.
A função de despacho do manipulador de parâmetros inválido chama o manipulador de parâmetros 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 mini-despejo. Se ativado pelo sistema operativo, um caixa de diálogo pergunta ao utilizador se ele deseja enviar o relatório de falhas 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âmetros 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 interromperão a execução da função, definirão errno 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 EINVAL são ambos utilizados para indicar um parâmetro inválido. Em alguns casos, um código de erro mais específico é retornado, como EBADF para um ponteiro de arquivo incorreto passado como um parâmetro.
Para obter mais informações sobre errno, consulte errno, _doserrno, _sys_errlist, e _sys_nerr.
Ver também
Elementos de segurança na CRT
Ficheiros de tempo de execução de C (CRT) e C++ Standard Library (STL) .lib