Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Dateizugriff bei Release-Version VS2005/VC++

Empfohlene Antworten

Veröffentlicht

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

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.

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.