Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

-- 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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...