Validación de parámetros

La mayoría de las funciones de CRT mejoradas para la seguridad, y muchas que no son, validan sus parámetros para cosas como comprobar punteros para NULL, que los enteros se encuentran en un intervalo válido o que los valores de enumeración son válidos. Cuando se encuentre un parámetro no válido, se llama al controlador de parámetros no válidos.

Rutina de controlador de parámetros no válida

Cuando una función de biblioteca en tiempo de ejecución de C detecta un parámetro no válido, captura la información sobre el error y llama a una macro que encapsula una función de distribución del controlador de parámetros no válidos. Que será uno de _invalid_parameter, _invalid_parameter_noinfoo _invalid_parameter_noinfo_noreturn. La función de distribución que se llame depende de que el código sea, respectivamente, una compilación de depuración, una compilación comercial o si el error no se considera recuperable.

En compilaciones de depuración, la macro de parámetros no válidos normalmente genera un error de aserción y un punto de interrupción del depurador antes de que se llame a la función de distribución. Cuando se ejecuta el código, la aserción se puede notificar al usuario en un cuadro de diálogo que tenga "Anular", "Reintentar" y "Continuar" o opciones similares que dependen del sistema operativo y la versión de CRT. Estas opciones permiten al usuario finalizar inmediatamente el programa, asociar un depurador o permitir que el código existente siga ejecutándose, lo que llama a la función de distribución.

La función de distribución del controlador de parámetros no válidos llama al controlador de parámetros no válidos actualmente asignado. De manera predeterminada, el parámetro no válido llama a _invoke_watson, lo que hace que la aplicación se cierre y genere un minivolcado. Si se habilita mediante el sistema operativo, un cuadro de diálogo pregunta al usuario si quiere enviar el volcado de memoria en Microsoft para su análisis.

Puede cambiar este comportamiento mediante las funciones _set_invalid_parameter_handler o _set_thread_local_invalid_parameter_handler para establecer el controlador de parámetros no válidos en su propia función. Si la función especificada no finaliza la aplicación, el control se devuelve a la función que recibió los parámetros no válidos. En el CRT, estas funciones normalmente interrumpen la ejecución de la función, establecen errno un código de error y lo devuelven. En muchos casos, el valor errno y el valor devuelto son EINVAL, lo que indica un parámetro no válido. En algunos casos, se devuelve un código de error más específico, como, por ejemplo, EBADF para un puntero de archivo incorrecto que se pasa como parámetro.

Para obtener más información sobre errno, veaerrno , _doserrno, _sys_errlisty _sys_nerr.

Consulte también

Características de seguridad en CRT
Archivos .lib de tiempo de ejecución de C (CRT) y biblioteca estándar de C++ (STL)