Share via


Utilizar la versión de depuración para comprobar si se ha sobrescrito la memoria

Para usar la compilación de depuración para comprobar si se ha sobrescrito la memoria, primero debe recompilar el proyecto para su depuración. A continuación, vaya al principio de la función InitInstance de la aplicación y agregue la siguiente línea:

afxMemDF |= checkAlwaysMemDF;

El asignador de memoria de depuración coloca bytes de protección en torno a todas las asignaciones de memoria. Estos bytes de protección no hacen nada, pero puede comprobar si se han cambiado, lo que indicaría una sobrescritura de memoria. De lo contrario, esto solo proporciona un búfer que, de hecho, le permite realizar una sobrescritura de memoria.

Al activar checkAlwaysMemDF, obliga a MFC a llamar a la función AfxCheckMemory cada vez que se realiza una llamada a new o delete. Si se detecta una sobrescritura de memoria, se generará un mensaje de seguimiento similar al siguiente:

Damage Occurred! Block=0x5533

Si ve uno de estos mensajes, debe examinar el código para determinar dónde se ha producido el daño. Para aislar más exactamente el punto en el que se ha producido la sobrescritura de memoria, puede realizar llamadas explícitas a AfxCheckMemory usted mismo. Por ejemplo:

ASSERT(AfxCheckMemory());
    DoABunchOfStuff();
    ASSERT(AfxCheckMemory());

Si la primera llamada ASSERT se realiza correctamente y se produce un error en la segunda, significa que la sobrescritura de memoria se debe haber producido en la función entre las dos llamadas.

En función de la naturaleza de la aplicación, puede encontrarse con que afxMemDF hace que el programa se ejecute demasiado despacio como para hacer pruebas. La variable afxMemDF hace que se llame a AfxCheckMemory para cada llamada a "new" y "delete". En ese caso, debe dispersar sus propias llamadas a AfxCheckMemory() tal y como se ha mostrado anteriormente, e intentar aislar la sobrescritura de memoria de este modo.

Consulte también

Solucionar problemas de versiones de lanzamiento