include für CMemoryState



  • Hallo

    Ich will mein Programm auf memory leaks prüfen. Habe in der Hilfe die Klasse CMemoryState gefunden.

    #ifdef _DEBUG
        CMemoryState oldMemState, newMemState, diffMemState;
        oldMemState.Checkpoint();
    #endif
    
    int *pInt = new int( 5 ) ;
    
    #ifdef _DEBUG
        newMemState.Checkpoint();
        if( diffMemState.Difference( oldMemState, newMemState ) )
        {
            TRACE( "Memory leaked!\n" );
        }
    #endif
    

    Leider bekomme ich die Fehlermeldung: 'CMemoryState' : undeclared identifier .
    Also anscheinend fehlt mir die richtige #include. In der Hilfe finde ich allerdings nichts dazu.

    Kann mir jemand weiter helfen?

    Auch für Hinweise auf andere Möglichkeiten memory leaks aufzuspüren wäre ich dankbar.

    Danke im voraus.



  • Hallo,

    mit welcher Entwicklungsumgebung wird gearbeitet? Doch hoffentlich nicht mit einer Express, in der es MFC nicht gibt. In meiner Hilfe steht übrigens:

    Requirements
    Header: afx.h

    Ein Header, der über stdafx.h sowieso mit eingebunden wird, wenn man eine MFC-unterstützte Anwendung erstellt.

    MFg



  • Hallo,

    habe afx.h eingefügt. Dann bekomme ich allerdings die folgenden Fehlermeldungen:

    --------------------Configuration: TestApplication - Win32 Debug--------------------
    Compiling...
    StdAfx.cpp
    Compiling...
    TestApplication.cpp
    Linking...
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj)
    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
    Debug/TestApplication.exe : fatal error LNK1120: 2 unresolved externals
    Error executing link.exe.

    TestApplication.exe - 4 error(s), 0 warning(s)

    Habe dann auch stdafx.h probiert, mit dem folgenden Ergebnis:

    --------------------Configuration: TestApplication - Win32 Debug--------------------
    Compiling...
    StdAfx.cpp
    Compiling...
    TestApplication.cpp
    c:\testapplication\testapplication.cpp(40) : error C2065: 'CMemoryState' : undeclared identifier
    c:\testapplication\testapplication.cpp(40) : error C2146: syntax error : missing ';' before identifier 'oldMemState'
    c:\testapplication\testapplication.cpp(40) : error C2065: 'oldMemState' : undeclared identifier
    c:\testapplication\testapplication.cpp(40) : error C2065: 'newMemState' : undeclared identifier
    c:\testapplication\testapplication.cpp(40) : error C2065: 'diffMemState' : undeclared identifier
    c:\testapplication\testapplication.cpp(41) : error C2228: left of '.Checkpoint' must have class/struct/union type
    c:\testapplication\testapplication.cpp(49) : error C2228: left of '.Checkpoint' must have class/struct/union type
    c:\testapplication\testapplication.cpp(50) : error C2228: left of '.Difference' must have class/struct/union type
    c:\testapplication\testapplication.cpp(52) : error C2065: 'TRACE' : undeclared identifier
    Error executing cl.exe.

    TestApplication.exe - 9 error(s), 0 warning(s)

    Vielleicht erzähle ich mal was über das eigentliche Programm, um das es geht. Ich entwickle es mit Visual C++ 6.0 unter Windows in AnsiC++, da es auch unter anderen Betriebssystemen (andere Compiler) benutzt werden soll.

    Früher habe ich mit Borland C++ Builder gearbeitet (auch für AnsiC++). Darin gibt es "CodeGuard", mit dem man memory leaks aufspüren kann, ohne dafür das Programm selber ändern zu müssen. Gibt es so etwas in Visual nicht?



  • erinneremichnicht schrieb:

    Früher habe ich mit Borland C++ Builder gearbeitet (auch für AnsiC++). Darin gibt es "CodeGuard", mit dem man memory leaks aufspüren kann, ohne dafür das Programm selber ändern zu müssen. Gibt es so etwas in Visual nicht?

    Versuch es doch mal mit:
    http://www.codeproject.com/KB/applications/leakfinder.aspx oder http://www.codeproject.com/KB/applications/visualleakdetector.aspx

    Es gibt natürlich auch kommerzielle Alternativen. Die kannst Du Dir aber bestimmt selbst ergoogeln...


  • Mod

    Wenn afx.h oder afxwin.h verwendet werden, dann müssen diese Header vor allen anderen included werden!


Anmelden zum Antworten