Unterscheide von VC6.0 debug und release konfiguration



  • Hi.

    Wenn ich MS VC++ 6.0 von der debug auf release konfiguration umstelle bekomme ich zur laufzeit probleme (beide konfiguration sind noch auf standardeinstellungen):
    beim return in WinMain bekomme ich vor dem Ende in VC vom Debugger nochmal ein "User Breakpoint called from Code at 0x... "
    Im Debugfenster steht:
    "HEAP[AudioEncoder.exe]: Heap block at 00AA1F20 modified at 00AA1F23 past requested size of fffffffb"
    Nach Memoryleaks habe ich schon geguckt und nichts gefunden... Warum gibts beim release so einen fehler und im debug garnichts?
    Wenn ich die exe selber starte gibts auch keinen fehler.



  • Hi
    (Knapp) zu den Unterschieden:
    Die Debugversion ist (von der Dateigröße) um einiges größer, da zusätzlich Debuginginformationen (zur Fehlerfindung) gespeichert werden.
    Für beide Versionen brauchst du die MFC dlls.
    Normalerweise sind die Release dlls bei den Usern vorhanden, die Debug dlls aber nur bei Programmierern (logisch).
    Bei den Debug-Versionen kann es auch zusätzliche Ausgaben geben, die die Programmierer auf potentielle Bugs hinweisen.

    Hoffe ich konnte dir helfen.

    Grüße Rapha





  • Mal abgesehen von deinem Namen 😡 war dein Beitrag hilfreich 😉



  • Mir hats leider nicht gebracht.

    Mein Programm komprimiert in einem Nebenthread audiodaten. Nur wenn der Thread nicht richtig anläuft und ich ihn mit einem fehler mit return zurückschicke tritt der Fehler auf. Aber auch erst in der letzten Zeile in WinMAIN nachdem das ganze Programm mit PostQuitMessage beendet wird.

    Alle Variablen sind initialisiert, einen Speicherzugriffsfehler konnte ich nicht finden und ASSERT-irgendwas kenn und benutze ich nicht.

    Kann das mit dem CreateThread zusammenhängen?
    der anfang der Threadfunktion sieht so aus:

    ...
    
    DWORD WINAPI ogg_encode()
    {
    	HANDLE OggDatei;
    	OggDatei = CreateFile(oggDateiname,...);
    	if (OggDatei == INVALID_HANDLE_VALUE)
    	{
    		MessageBox(NULL, "Ogg DateiHandle konnte nicht initialisiert werden.", "Fehler", MB_OK | MB_ICONERROR);
    		return(2);
    	}	
    
    ...
    }
    

    Nur wenn CreateFile fehlschlägt dann gibts beim beenden das gesamten programms den fehler. (OggDateiname ist global) Aufgerufen wird der thread in WinMain mit

    EncodeThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ogg_encode,0,0,&threadID);



  • DWORD WINAPI ogg_encode()

    Sieht das wirklich bei dir so aus? Normalerweise hat die ThreadProc noch einen Parameter "LPVOID lpParameter"

    Lass den dummen Cast nach LPTHREAD_START_ROUTINE weg.



  • ohne den Cast funkioniert der Thread nicht mehr.

    Aber ich hab den Fehler jetzt gefunden

    Des Teufels letztes Geschenkt: sprintf. Die funktion bastelt sich da einen bufferfehler zurecht und der Fehler tritt erst beim beenden des Programms auf.

    Ich hab jetzt schon so oft fiese Probleme mit sprintf gehabt... jetzt schmeiss ich das ging überall raus!



  • mach die signatur der funktion so:

    DWORD WINAPI ogg_encode(PVOID lpParam)

    dann kannst du den Cast wegmachen.



  • ok... passt


Log in to reply