SOLUCIÓN: Error de página no válida en el archivo Mscvrt.dll

Seleccione idioma Seleccione idioma
Id. de artículo: 190536 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E190536
Expandir todo | Contraer todo

Síntomas

Después de instalar las bibliotecas de tiempo de ejecución de C (Msvcrt.dll) de Visual C++ 6.0 en el equipo, las aplicaciones que anteriormente se ejecutaban correctamente no funcionan y aparece un mensaje de error de aplicación similar al siguiente.
<Nombre de aplicación> provocó un error de página no válida en el módulo MSVCRT.DLL en XXXX:XXXXXXXX.

Causa

Una posible causa de este error es que la aplicación ha escrito después del bloque de memoria que es propiedad de un objeto en particular. El administrador de memoria del montón de bloques pequeños que se incluye con las bibliotecas de tiempo de ejecución de Visual C++ 6.0 incorpora estructuras de control del montón dentro del montón de bloques pequeños. Si se sobrescribe el bloque de memoria, se cambian las direcciones de los punteros del montón de bloques pequeños, con lo que se obtiene un puntero erróneo y, posiblemente, un error en Msvcrt.dll cuando se haga referencia al puntero.

Solución

Los proveedores de aplicaciones tienen que garantizar que sus aplicaciones usan el montón de bloques pequeños de tiempo de ejecución de C correctamente.

Para ayudar a los clientes que experimentan este problema en las aplicaciones de otros proveedores, Microsoft ha lanzado una nueva biblioteca de vínculos dinámicos (DLL) de tiempo de ejecución de C, Msvcrt.dll, que implementa dos administradores para el montón: el administrador del montón compatible con Visual C++ versión 5.0 y el administrador compatible con Visual C++ versión 6.0. Msvcrt.dll detecta la versión de Visual C++ con la que se integra la aplicación y usa el administrador del montón apropiado para ésta. Si la versión es Visual C++ 6.0 o posterior, se usa el administrador del montón compatible con esta versión; si se usa una versión anterior de Visual C++, se utiliza el administrador compatible con Visual C++ versión 5.0.

Los usuarios de Visual Studio 6.0 pueden obtener el nuevo archivo Msvcrt.dll instalando el Service Pack de Microsoft Visual Studio más reciente. Si no usa Visual Studio, instale la Actualización de las bibliotecas de Microsoft (Microsoft Libraries Update); para obtener información adicional, vea el siguiente artículo de Microsoft Knowledge Base:
197298 Actualización de las bibliotecas de Microsoft: qué son, dónde están y por qué utilizarlas

Estado

Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Este error se corrigió en Visual Studio 6.0 Service Pack 3. Para obtener más información acerca de los Service Packs de Visual Studio, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
194022 Service Pack de Visual Studio 6.0: qué son, dónde están y por qué son necesarios
194295 Cómo indicar que un Service Pack de Visual Studio 6.0 está instalado

Más información

El montón de bloques pequeños comprende las asignaciones que tienen un tamaño menor de 1 KB. Los errores de esta naturaleza podrían comportarse de forma diferente en las versiones anteriores de la biblioteca de tiempo de ejecución de C porque las estructuras de control se encuentran en una ubicación diferente e independiente de la memoria. Con frecuencia, estos tipos de errores de codificación provocan el daño de otro bloque de memoria y, posiblemente, el bloqueo del sistema. La secuencia de eventos que conducen a una infracción de acceso es diferente cuando se usan las bibliotecas de tiempo de ejecución de C de Visual C++ 6.0.

Puede controlar estos tipos de problemas con el montón de depuración. Vea la documentación en pantalla titulada "Usar el montón de depuración" (puede estar en inglés). Para habilitar el montón de depuración, tiene que llamar a _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF |_CRTDBG_CHECK-_ALWAYS_DF) en la inicialización del proceso en una compilación de depuración de la aplicación.

Propiedades

Id. de artículo: 190536 - Última revisión: miércoles, 23 de agosto de 2006 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palabras clave: 
kberrmsg kbbug kbfix kbcrt kbqfe kbvs600sp2fix kbvs600sp3fix kbhotfixserver KB190536

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com