Runtime Error wegen deklaration einer Variable!?



  • Hi,

    ich benutze MS Visual Studio 2008.

    mein Programm enthält eine Struktur:

    struct EntryInfo
    {
    	EntryInfo()
    	{
    		hSelectionItem	= NULL;
    		iCMode			= -1;
    		cDefBkColor		= 0;
    	}
    
    	HTREEITEM 																	hSelectionItem;
    	COLORREF																	cDefBkColor;
    
    	int																			iCMode;
    };
    

    mein Programm (MFC, Dialogbasierend) stürzt ab in 'CPrortammApp::InitInstance()' wenn das Hauptdialogfeld erzeugt wird:

    CProgrammDlg dDialog;
    
    	m_pMainWnd = &dDialog;
    
    	// Dialogfeld anzeigen:
    	dDialog.DoModal();
    

    wenn ich in der Struktur die Variable 'cDefBkColor' NICHT deklariere dann funktioniert alles!?!?

    Wie kann sowas passieren???

    Ich hab auch schon den Fall gehabt dass ich die Reihenfolge meiner Variablen in der Struktur ändern musste damit das Programm läuft 😮


  • Mod

    Nie im Leben. Zeig mehr Code.

    Nur rine Deklaration macht gar nichts...



  • Ja, denke ich auch!

    Was soll ich denn noch an Code posten? Die Stelle wo es crasht und die Stukturdefinition.. Mehr zeigt er mit beim debuggen auch nicht an, hier die Fehlermeldung:

    Unhandled exception at 0x0043eec9 in Hierarchy Explorer.exe: 0xC0000005: Access violation writing location 0x00000020.
    

    Aber es ist genau so wie ich es beschribe (nicht oft, aber auch nicht nur an einer Stelle). Ohne Deklaration funktioniert es - und mit nicht...

    Beim letzten Mal war es aber das selbe Problem, nur eine andere Struktur in der auch eine Variable deklariert wurde.


  • Mod

    Zeig den Callstack!



  • Gut, da ist er:

    Hierarchy Explorer.exe!CHExplorerApp::InitInstance() Line 40 + 0x9 bytes C++

    Hierarchy Explorer.exe!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f1e, int nCmdShow=1) Line 37 + 0xd bytes C++

    und hier die 'InitInstance()':

    BOOL CHExplorerApp::InitInstance()
    {
    	// Initialisierungen:
    	InitCommonControls();
    
    	CWinApp::InitInstance();
    
    	AfxEnableControlContainer();
    
    	CMenuXP::InitializeHook();
    
    	// Registry Key setzen:
    	SetRegistryKey(_T("Vom lokalen Anwendungs-Assistenten generierte Anwendungen"));
    
    	CHExplorerDlg dDialog;
    
    	m_pMainWnd = &dDialog;
    
    	// Dialogfeld anzeigen:
    	dDialog.DoModal();
    
    	return (FALSE);
    }
    


  • Das Problem habe ich umgangen, bzw. etwas vernachlässigt.

    Jetzt tritt noch etwas auf, was das Problem vielleicht eingrenzt...

    Die im Konstruktor festgelegten Default-Werte werden nicht übernommen.
    Sie sind aber auch nicht uninitialisiert (der Wert von Integer-variablen wäre dann z.B. -858993460).

    Ich vermute die falschen Werte werden von anderen Variablen in der Struktur überschrieben. Kann es sein dass das Programm den Speicher einfach nicht richtig deklariert oder sowas in der Richtung??

    Gibts ne Projekteinstellung die man verändern könnte?


  • Mod

    Du initialisierst die Variablen nicht. Punkt!
    Schau Dir Deinen Wert mal an und Du wirst beim Integer feststellen, dass der Wert 0xCCCCCCCC ist.
    Das ist genau der Wert, den der Debugger für nicht initialisierte Variablen vergibt.

    Zeig uns bitte mehr Code!

    Siehe auch:
    http://blog.m-ri.de/index.php/2008/11/27/vs-tipps-tricks-heap-bugs-finden-teil-4/


Anmelden zum Antworten