Veröffentlicht 26. September 200618 j -- Visual Studio 2005 / Programm in C++ -- Hallo an Alle, ich habe zur Zeit folgendes Problem, ich habe ein Programm, dass im Debug-Modus einwandfrei läuft, aber im Release-Modus sofort einen Fehler ausspuckt. Mein Code: int Cursor=0; sTemp=""; sTemp=GetCommandLine(); // Eigenpfad bestimmen Cursor=sTemp.ReverseFind('\\'); //Zeichen bis zur Exe-Datei bestimmen sTemp=sTemp.Mid(0,Cursor+1); // Exe-Datei rausschneiden, so dass nur der // reine Pfad übrig bleibt SetInipfad(sTemp.Mid(1,Cursor)); // Pfadadresse speichern sTemp=GetInipfad()+"Pfad.ini"; // Dateipfad erzeugen stream_r1=_fsopen(sTemp,"r",_SH_DENYWR); // Dateipfad öffnen fgets(cTemp,290,stream_r1); // Auslesen der ersten Zeile in der Datei In der Release-Version bekomme ich im fgets-Schritt die Fehlermeldung, dass Microsoft Visual Studio C Runtime Library in der Exe-Datei einen fatalen Fehler entdeckt hat und ich debuggen soll. Aber in der reinen Debug-Version läuft das Programm ohne Probleme und führt die Anweisungen korrekt aus. Zur Info: char cTemp[300]; Kann mir jemand auf die Sprünge helfen? Mit Dank im voraus KK
27. September 200618 j Das ist ein schönes Beispiel für "optimistischen Code" - du gehst einfach davon aus, dass alles klappt, weit und breit ist keine Fehlerbehandlung zu sehen In der Release-Version bekomme ich im fgets-Schritt die Fehlermeldung, dass Microsoft Visual Studio C Runtime Library in der Exe-Datei einen fatalen Fehler entdeckt hat und ich debuggen soll.Dann ist vermutlich _fsopen fehlgeschlagen. Das fängt dein Code nicht ab. Lass dir die Zwischenergebnisse mit MessageBox ausgeben, um die Ursache einzukreisen. Ich vermute, dass GetCommandLine etwas anderes liefert, als du erwartest.
27. September 200618 j Hallo Klotzkopp, danke für Deine Antwort, sich die Einzelschritte über MessageBoxen ausgeben zu lassen ist eine gute Idee. Ich dachte, dass die Release-Version die Befehle gleich abarbeitet, wie die Debug-Version, werde dass aber offenkundig doch überprüfen müssen. Es wäre nett, wenn Du mir noch mitteilen könntest, wie man z.B. Fehler bei fsopen abfangen kann. Schreibt man eine Assert-Anweisung, bzw. try-, Catch-Anweisung oder wie geht man vor? Gruß KK
27. September 200618 j Mein Problem hat sich erledigt. Der Fehler lag darin, das die Pfad.ini zwar in dem Debug-Verzeichnis lag, aber nicht in dem Release-Verzeichnis. Ich habe mir zunächst eine MessageBox ausgeben lassen, die mir noch einmal einträgt, mit welchem String (sTemp) die Datei geöffnet werden soll. Der String passte und war fehlerlos. Dann habe ich das Datei-Öffnen so abgefangen, dass ich fragte ob es NULL sei. Dem war so. Als ich dann wie gesagt ins Release-Verzeichnis ging, stellte ich fest, dass keine Pfad.ini da war. Seit ich eine erstellt habe, läuft auch die Release-Version anstandslos. War jetzt wahrscheinlich ein dämlicher Fehler, der mich jedoch bezüglich der Aufmerksamkeit von Fehlerquellenabfragungen weitergebracht hat. Dank Dir Klotzkopp Gruß KK
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.