Wie finde ich meinen Fehler - Newbie // falscher Speicher zugriff



  • Moin Leute,
    ich hab eine Dlg-Klasse. Mit ListCtrls aber irgenwie stürtzt ab und zu immer alles ab, da kommt immer:
    Die Anweisung in "0x71763e9e" verweist auf Speicher in "0x00740093". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

    Ich benutze keine Zeiger und weiß soher überhaubt nicht wie so dieser Fehler kommt.
    Wenn ich mit dem debugger rumsteppe tritt dieser fehler in der "wincore.cpp" auf. Und dort unter

    LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
    

    Um genau zu sein bei:

    return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);
    

    Hab keine ahnung wie ich das wider hinbekomme. Würde mich über jeden Tip freuen - bitte. *hoff*

    gruß an alle



  • Zeig mir 'ne Wolke über Deutschland, und ich sag dir, wie das Wetter in Hinterindien wird!



  • Würde dir ja gerne mehr erzählen aber ich weiß nicht was ich erzählen soll. Ich weiß nicht wann/wodurch/wieso dieser Fehler auftritt. Wie kann ich denn Messages debuggen. Oder wie finde ich herraus wie dieser Fehler veruhrsacht dir?



  • return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);
    

    m_pfnSuper sieht zumindest vom Namen her stark nach einem Funktionszeiger aus. Das könnte ein Ansatz zur Fehlersuche sein.

    H. Bergeron



  • Die fkt CallWindowProc() nimmt als ersten parameter einen Zeiger!
    Schau mal ob dein "m_pfnSuper" auch ein zeiger ist.bei einen normalen object würde sich die speicherverletzung erklären(object wird zerstört).
    daran könnte es vieleicht liegen!



  • Ich denke, das Problem ist folgendes: Du hattest einen Button oder ähnliches auf dem Dialog, den mit einer Variable oder Nachricht verbunden und ihn dann gelöscht. Dann bleibt dieser Verknüpfungseintrag im Quellcode zurück, er will auf einen nciht mehr vorhandenen Button o.ä. zugreifen und -> BOOM



  • Welchen Wert haben denn die Variablen? Es könnte vielleicht hilfreich sein, zu wissen, was in nMsg steht, um den Ablauf zu rekonstruieren.
    Oder zeig am besten gleich den ganzen Call Stack (Ansicht > Debug Fenster > Aufrufliste).



  • 1. Wann (bei welchen Ereignissen) stürzt das Prog. ab?
    2. Zeig etwas von Deinem Code, der mit Fenstern arbeitet, nicht den aus der MFC!



  • Hm, jetzt weiß ich das es an meinem CTreeCtrl liegt.

    + this 0x0012f4a8 {CTreeCtrl hWnd=0x000f0354} CWnd * const
    nMsg 515 unsigned int
    wParam 1 unsigned int
    lParam 3473439 long
    pfnWndProc 0x0012f074 long (HWND__ , unsigned int, unsigned int, long)

    @tag
    Aufrufliste sagt:

    comctl32.dll!71752d9a()
    comctl32.dll!71752d06()
    comctl32.dll!71753596()
    comctl32.dll!71754276()
    comctl32.dll!71755571()
    USER32.DLL!77e01d0a()
    USER32.DLL!77e03d4b()
    USER32.DLL!77e0734d()
    > MeinProgramm.exe!CWnd::DefWindowProcA(unsigned int nMsg=515, unsigned int wParam=1, long lParam=3473439) Zeile 1022 + 0x20 C++
    MeinProgramm.exe!CWnd::WindowProc(unsigned int message=515, unsigned int wParam=1, long lParam=3473439) Zeile 1738 + 0x1a C++
    MeinProgramm.exe!AfxCallWndProc(CWnd * pWnd=0x0012f4a8, HWND__ * hWnd=0x000f0354, unsigned int nMsg=515, unsigned int wParam=1, long lParam=3473439) Zeile 241 + 0x1a C++
    MeinProgramm.exe!AfxWndProc(HWND__ * hWnd=0x000f0354, unsigned int nMsg=515, unsigned int wParam=1, long lParam=3473439) Zeile 387 C++
    USER32.DLL!77e01d0a()
    USER32.DLL!77e01bc8()
    USER32.DLL!77e01cef()
    USER32.DLL!77e129fc()
    MeinProgramm.exe!CWnd::IsDialogMessageA(tagMSG * lpMsg=0x00156798) Zeile 200 C++
    MeinProgramm.exe!CWnd::PreTranslateInput(tagMSG * lpMsg=0x00156798) Zeile 4505 C++
    MeinProgramm.exe!CDialog::PreTranslateMessage(tagMSG * pMsg=0x00156798) Zeile 83 C++
    MeinProgramm.exe!CWnd::WalkPreTranslateTree(HWND__ * hWndStop=0x0008035e, tagMSG * pMsg=0x00156798) Zeile 3121 + 0x12 C++
    MeinProgramm.exe!AfxInternalPreTranslateMessage(tagMSG * pMsg=0x00156798) Zeile 238 + 0x12 C++
    MeinProgramm.exe!CWinThread::PreTranslateMessage(tagMSG * pMsg=0x00156798) Zeile 795 + 0x9 C++
    MeinProgramm.exe!AfxPreTranslateMessage(tagMSG * pMsg=0x00156798) Zeile 257 + 0xf C++
    MeinProgramm.exe!AfxInternalPumpMessage() Zeile 183 + 0x18 C++
    MeinProgramm.exe!CWinThread::PumpMessage() Zeile 916 C++
    MeinProgramm.exe!AfxPumpMessage() Zeile 195 + 0xb C++
    MeinProgramm.exe!CWnd::RunModalLoop(unsigned long dwFlags=4) Zeile 4559 + 0x5 C++
    MeinProgramm.exe!CDialog::DoModal() Zeile 533 + 0xc C++
    MeinProgramm.exe!CProbentrgerverwaltungDlg::OnMausmenuBaumstruktur() Zeile 1090 C++
    MeinProgramm.exe!_AfxDispatchCmdMsg(CCmdTarget * pTarget=0x0012fabc, unsigned int nID=205, int nCode=0, void (void)* pfn=0x004ed74f, void * pExtra=0x00000000, unsigned int nSig=53, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000) Zeile 89 C++
    MeinProgramm.exe!CCmdTarget::OnCmdMsg(unsigned int nID=205, int nCode=0, void * pExtra=0x00000000, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000) Zeile 396 + 0x27 C++
    MeinProgramm.exe!CDialog::OnCmdMsg(unsigned int nID=205, int nCode=0, void * pExtra=0x00000000, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000) Zeile 88 + 0x18 C++
    MeinProgramm.exe!CWnd::OnCommand(unsigned int wParam=205, long lParam=0) Zeile 2542 C++
    MeinProgramm.exe!CWnd::OnWndMsg(unsigned int message=273, unsigned int wParam=205, long lParam=0, long * pResult=0x0012f7d0) Zeile 1751 + 0x1c C++
    MeinProgramm.exe!CWnd::WindowProc(unsigned int message=273, unsigned int wParam=205, long lParam=0) Zeile 1737 + 0x1e C++
    MeinProgramm.exe!AfxCallWndProc(CWnd * pWnd=0x0012fabc, HWND__ * hWnd=0x0008035e, unsigned int nMsg=273, unsigned int wParam=205, long lParam=0) Zeile 241 + 0x1a C++
    MeinProgramm.exe!AfxWndProc(HWND__ * hWnd=0x0008035e, unsigned int nMsg=273, unsigned int wParam=205, long lParam=0) Zeile 387 C++
    USER32.DLL!77e01d0a()
    USER32.DLL!77e01bc8()
    USER32.DLL!77e072b4()
    MeinProgramm.exe!CWinThread::PumpMessage() Zeile 916 C++
    MeinProgramm.exe!AfxPumpMessage() Zeile 195 + 0xb C++
    MeinProgramm.exe!CWnd::RunModalLoop(unsigned long dwFlags=4) Zeile 4559 + 0x5 C++
    MeinProgramm.exe!CDialog::DoModal() Zeile 533 + 0xc C++
    MeinProgramm.exe!CProbentrgerverwaltungApp::InitInstance() Zeile 57 + 0xb C++
    MeinProgramm.exe!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x001330dd, int nCmdShow=1) Zeile 39 + 0xb C++
    MeinProgramm.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x001330dd, int nCmdShow=1) Zeile 25 C++
    MeinProgramm.exe!WinMainCRTStartup() Zeile 251 + 0x32 C
    KERNEL32.DLL!77e8ca90()


Anmelden zum Antworten