Comprobación de errores 0x18: REFERENCE_BY_POINTER
La comprobación de errores REFERENCE_BY_POINTER tiene un valor de 0x00000018. Esto indica que el recuento de referencias de un objeto no es válido para el estado actual del objeto.
Importante
Este artículo va dirigido a programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.
Parámetros de REFERENCE_BY_POINTER
Parámetro | Descripción |
---|---|
1 |
Tipo del objeto cuyo recuento de referencias se está reduciendo. |
2 |
Objeto cuyo recuento de referencias se está reduciendo. |
3 |
Reserved |
4 |
Reserved |
Causa
El recuento de referencias de un objeto no es válido para el estado actual del objeto. Cada vez que un controlador usa un puntero a un objeto, el controlador llama a una rutina de kernel para aumentar el recuento de referencias del objeto en uno. Cuando el controlador se realiza con el puntero, el controlador llama a otra rutina de kernel para reducir el recuento de referencias en uno.
Los controladores deben coincidir con las llamadas a las rutinas que aumentan (referencia) y reducen (desreferencia) el recuento de referencias. Esta comprobación de errores se debe a una incoherencia en el recuento de referencias del objeto. Normalmente, la incoherencia se debe a un controlador que reduce el recuento de referencias de un objeto demasiadas veces, realizando llamadas adicionales que desreferencian el objeto. Esta comprobación de errores puede producirse porque el recuento de referencias de un objeto llega a cero mientras todavía hay identificadores abiertos para el objeto. También puede ocurrir cuando el recuento de referencias del objeto cae por debajo de cero, independientemente de si hay o no identificadores abiertos para el objeto.
Solución
Asegúrese de que el controlador coincide con las llamadas a las rutinas que aumentan y reducen el recuento de referencias del objeto. Asegúrese de que el controlador no realiza llamadas adicionales a rutinas que desreferencian el objeto (consulte el Parámetro 2).
Puede usar un depurador para ayudar a analizar este problema. Para obtener más información, consulte Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg). La extensión de depuración !analyze indica información sobre la comprobación de errores y puede resultar útil para determinar la causa principal.
Para buscar el identificador y el recuento de punteros en el objeto, use el comando del depurador !object.
kd> !object address
Donde address es la dirección del objeto especificado en el Parámetro 2.
También puede establecer un punto de interrupción en el código que conduce a este código de detención e intentar avanzar un solo paso en el código con errores.
Si no está equipado para usar el depurador de Windows para trabajar con este problema, puede usar algunas técnicas básicas de solución de problemas.
Compruebe el registro del sistema en el Visor de eventos para ver si hay mensajes de error adicionales que puedan ayudar a identificar el dispositivo o controlador que está causando este error.
Si se identifica un controlador en el mensaje de verificación de errores, deshabilítelo o consulte al fabricante para obtener actualizaciones del controlador.
Confirme que todo el hardware nuevo que se instale sea compatible con la versión instalada de Windows. Por ejemplo, puede obtener información sobre el hardware necesario en Cómo buscar las especificaciones del equipo y los requisitos del sistema para Windows 10.
Para obtener información adicional sobre la solución de problemas generales, consulte Análisis de los datos de la comprobación de errores de la pantalla azul.