Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
Este tema es aplicable a:
Edición |
Visual Basic |
C# |
C++ |
Web Developer |
|---|---|---|---|---|
Express |
![]() |
![]() |
Sólo para código nativo |
![]() |
Standard |
![]() |
![]() |
Sólo para código nativo |
![]() |
Pro y Team |
![]() |
![]() |
Sólo para código nativo |
![]() |
Leyenda de la tabla:
![]() |
Se aplica |
![]() |
No procede |
![]() |
Comando o comandos ocultos de forma predeterminada. |
Nota: |
|---|
Los cuadros de diálogo y comandos de menú que se ven podrían ser distintos de los incluidos en la Ayuda, dependiendo de la configuración activa o la versión usada. Para cambiar su configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio. |
En este tema, se muestra cómo tomar instantáneas de la memoria para ayudar a localizar pérdidas de memoria.
Para detectar una pérdida de memoria
Cree un objeto CMemoryState Members llame a la función miembro CMemoryState::Checkpoint. Esto crea la primera instantánea de memoria.
Después de que el programa realiza sus operaciones de asignación y desasignación de memoria, cree otro objeto CMemoryState y llame a Checkpoint para ese objeto. Esto hace que se tome una segunda instantánea del uso de memoria.
Cree un tercer objeto CMemoryState y llame a su función miembro CMemoryState::Difference; suministre como argumentos los dos objetos CMemoryState anteriores. Si existen diferencias entre los dos estados de memoria, la función Difference devuelve un valor distinto de cero. Esto indica que algunos bloques de memoria no se han desasignado.
Este ejemplo muestra el aspecto del código:
// Declare the variables needed #ifdef _DEBUG CMemoryState oldMemState, newMemState, diffMemState; oldMemState.Checkpoint(); #endif // Do your memory allocations and deallocations. CString s("This is a frame variable"); // The next object is a heap object. CPerson* p = new CPerson( "Smith", "Alan", "581-0215" ); #ifdef _DEBUG newMemState.Checkpoint(); if( diffMemState.Difference( oldMemState, newMemState ) ) { TRACE( "Memory leaked!\n" ); } #endifObserve que las instrucciones de comprobación de memoria están enmarcadas por bloques #ifdef _DEBUG / #endif, de modo que sólo se compilan en versiones de depuración Win32 del programa.
Ahora que ha descubierto una pérdida de memoria, puede utilizar otra función miembro, CMemoryState::DumpStatistics, para Ver estadísticas de memoria que le ayudarán a localizarla.
.gif)
.gif)
.gif)
Nota: