REVISIÓN: La llamada a _set_se_translator en DllMain puede causar una pérdida de memoria

Id. de artículo: 815235 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

En una aplicación multiproceso, si un archivo DLL DllMain realiza una llamada a _set_se_translator , puede experimentar una pérdida de memoria en la biblioteca CRT.

Causa

Este problema se produce si utiliza la API de _beginthreadex para crear el subproceso debido a que el orden de inicialización de CRT hace que la por subproceso datos (PTD) estructura para que el subproceso puede asignar dos veces.

Solución

Ahora es disponible en Microsoft un hotfix compatible, pero sólo se diseñó para corregir el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico.

Nota Debe tener un acuerdo de licencia de Visual Studio para obtener este hotfix.

Para resolver el problema, póngase en contacto con los Servicios de soporte técnico de Microsoft con el fin de obtener el hotfix. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión. La versión en inglés de esta revisión tiene los atributos de archivo enumerados en la siguiente tabla u otros posteriores. Las fechas y horas de estos archivos aparecen en la hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   Date         Time   Version     Size       File name
   ------------------------------------------------------
   22-Feb-2003  04:42              3,218,510  Libcmtd.lib
   22-Feb-2003  04:46  6.0.9748.0    434,252  Msvcrtd.dll
   22-Feb-2003  04:33                934,378  Libcmt.lib
   22-Feb-2003  05:45  6.0.9748.0    278,581  Msvcrt.dll
   22-Feb-2003  03:42                  6,615  Thread.c
   22-Feb-2003  03:42                  8,554  Threadex.c

Solución

Puede evitar este problema llamando a _set_se_translator al principio del procedimiento de subproceso en lugar de en DllMain. No es una buena idea para llamar a funciones CRT tales como _set_se_translator en DllMain.
También puede evitar el problema mediante el uso CreateThread en lugar de _beginthreadex para iniciar los subprocesos.

Propiedades

Id. de artículo: 815235 - Última revisión: viernes, 21 de octubre de 2005 - Versión: 1.4
La información de este artículo se refiere a:
  • Microsoft Visual C++ 6.1
  • The C Run-Time (CRT)
  • Microsoft Visual Studio 6.0 Enterprise
  • Service Pack 5 de Microsoft Visual Studio 6.0
  • Microsoft Windows NT 4.0
  • Microsoft Windows NT 4.0 Service Pack 1
  • Microsoft Windows NT 4.0 Service Pack 2
  • Microsoft Windows NT 4.0 Service Pack 3
  • Microsoft Windows NT 4.0 Service Pack 4
  • Service Pack 5 de Microsoft Windows NT Workstation 4.0
  • Microsoft Windows NT 4.0 Service Pack 6
  • Service Pack 6.a de Microsoft Windows NT 4.0
Palabras clave: 
kbmt kbpending kbbug KB815235 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 815235

Enviar comentarios