Windows 7: 'Programm funktioniert nicht mehr'

Hallo, liebe Experten,

ich habe mit Visual C++ Express 2008 ein Programm erstellt, das in der Debug-Konfiguration problemlos funktioniert, jedoch in der Release-Konfiguration kommt es zu dem obigen Fehler und das Programm stürzt ab.

Weitere Information gibt es nicht, und es ist mir nie gelungen, diesen Fehler in der Debug-Variante zu reproduzieren, geschweige denn weitere Hinweise zu erhalten. Alle Optimierungen bei Release auszuschalten, hat auch nichts gebracht.

Ich konnte bisher durch gezieltes Auskommentieren von Code-Teilen nur ungefähr ermitteln, wo im Code der Fehler sein muß. Es werden Bitmaps erzeugt und entfernt (welche zur Darstellung von Diagrammen verwendet werden, die man Buttons an- und ausklicken kann, dabei gibt es Abfolgen von malloc und free (ich habe eine kleine Bibliothek von Bitmap-Funktionen aus einem alten Buch von Petzold über Windows-Programmierung verwendet).

Auch bei Windows XP gab es dieses Problem nicht.

Da es so überhaupt keine Hinweise gibt außer „Prog. funktioniert nicht mehr“ (wie kann es sein, daß es im Debug-Modus so völlig problemlos funktioniert und im Release-Modus abstürzt? - im übrigen passiert dies auch noch unregelmäßig) bin ich etwas ratlos und frage Euch, was die Ursache sein kann und wie ich sie finde.

Grüße,

I.

Hallo!
Einerseits verwendest Du im Debug-Modus u.U. unterschiedliche Bibliotheken, die sich unterschiedlich verhalten könnten und andererseits wird im Debugmodus oft Speicher mit 0 initialisiert, was im Release Fall nicht passiert. Wenn Du also irgendwo vergessen hast, Deinen Speicher nach der Allokation zu initialisieren, fällst Du dann u.U. trotz Abfrage auf NULL auf die Nase.

Ansonsten: Pack’ den fraglichen Bereich mal großzügig in try/catch, dann bekommst Du eher raus, was denn genau schief geht.

Hier: http://msdn.microsoft.com/en-us/library/vstudio/d5zh… ist zudem beschrieben, wie Du anhand von Crashdumps herausfindest, wo es im Code kracht.

Gruß,
Martin

Hallo I.,

Da es so überhaupt keine Hinweise gibt außer „Prog.
funktioniert nicht mehr“ (wie kann es sein, daß es im
Debug-Modus so völlig problemlos funktioniert und im
Release-Modus abstürzt? - im übrigen passiert dies auch noch
unregelmäßig) bin ich etwas ratlos und frage Euch, was die
Ursache sein kann und wie ich sie finde.

Das sieht nach einem nicht initialisiertem Zeiger aus.

„Zufällig“ zeigt dieser bei der Debug-Version in einen harmlosen Bereich, bei der Release aber in einen kritischen.
Initialisiert bedeutet nicht, dass in dem Zeiger kein Wert steht, sondern da steht irgendetwas aus einer früheren Rechenoperation. Da die Debug- und Release-Versionen unterschiedlichen Code erzeugen, können da dann auch unterschiedliche Werte stehen.

MfG Peter(TOO)

Hallo Peter(TOO),

danke für die Antwort.

Das sieht nach einem nicht initialisiertem Zeiger aus.

So etwas ähnliches war es auch. Das Programm versuchte, mit free(…) einen Speicherbereich freizugeben, der bereits freigegeben war.

Das kam durch ein ähnliches Phänomen zustande, wie hier beschrieben:

http://stackoverflow.com/questions/8500137/when-shou…

Jetzt funktioniert es.

Grüße,

I.

Hallo I.,

So etwas ähnliches war es auch. Das Programm versuchte, mit
free(…) einen Speicherbereich freizugeben, der bereits
freigegeben war.

Möglicherweise blockt die Debug-Version das Problem ab.

Hast du die Debug-Version nur so laufen gelassen oder auch unter dem Debugger? Unter dem Debugger bekommst du mehr Fehlermeldungen.

MfG Peter(TOO)

Hallo Peter(TOO),

Hast du die Debug-Version nur so laufen gelassen oder auch
unter dem Debugger? Unter dem Debugger bekommst du mehr
Fehlermeldungen.

beides, allerdings hat der Debugger keine Fehlermeldungen geliefert. Ich glaube auch, daß in der Debug-Version das Problem irgendwie abgeblockt wurde.

Ich verwende da ein primitives Verfahren der Fehlersuche, so daß ich mir an bestimmten Stellen Texte oder Zahlenwerte in irgendein Textfeld der Oberfläche anzeigen lasse, um zu sehen, welchen Weg das Programm nimmt oder an welcher Stelle es scheitert. Das reicht meistens aus, um einen Fehler zu finden. Deshalb kenne ich mit den Feinheiten des Debuggers nicht wirklich aus.

Grüße,

I.

Hi,

scheitert. Das reicht meistens aus, um einen Fehler zu finden.
Deshalb kenne ich mit den Feinheiten des Debuggers nicht
wirklich aus.

solltest du aber. Peter hat da vollkommen recht. Es gibt viele Fehler, die man nur mithilfe des Debuggers und dann auch nur mit genauen Kenntnissen findet. Ich erinner mich gut, an einen Fehler, der durch ein Objekt eines Mitarbeiters M erzeugt wurde und welches sporadisch nach 5, 10 oder 15 Minuten die Weiterarbeit verweigerte und die Software zum Absturz brachte.

Ich war derjenige, der das Ganze untersucht hat, da es aus meinem Fabrik-Geruest erzeugt wurde und der Fehler anderswo angezeigt wurde (d.h. in meinem Code). Am Ende kam heraus, dass M ein falsches Headerfile inkludiert hatte und der Compiler die Groesse des erzeugten Objektes falsch annahm (d.h. zu klein) und es irgendwann Ueberschreiber gab.

Gruss
E.