Problem mit CodeGuard!!!
-
Hi Leute,
ich habe mal angefangen mit dem Debuggen. Hmm naja
CodeGuard gibt mir ein Fehler aus
Ein falsches Datei-Handle (0xEA) wurde an die Funktion übergeben. 0x00456820 Aufruf von fgetc(0x32DC1A2C)
Das Programm läuft trotzdem.
Er bleibt an der Stelle stehen
datei.getline(D, 255);
Der vollständige Code ist
void __fastcall TMainForm::LoadConfig(TObject *Sender) { TStringList *worte = new TStringList(); TStringList *worte2 = new TStringList(); AnsiString sFile2 = GetRegistryValue("MainPath") + "\\Maschine.ini"; ifstream f(sFile2.c_str(),ios::binary); if (f) { char D[256]; while (f.getline(D,255)) { // <-- Da kommt die Fehler Meldung if (AnsiPos(worte->Strings[3], D) != 0) { worte2->Clear(); split(wort2,D,'='); sMachine = worte2->Strings[1]; } } if (!f.eof()) { MessageDlg("Fehler beim Lesen der 'Maschine.ini' Datei!",mtError,TMsgDlgButtons() << mbOK,0); Close(); } } else { if (FileExists(sFile2)) MessageDlg("Fehler beim Öffnen der 'Maschine.ini' Datei!",mtError,TMsgDlgButtons() << mbOK,0); else MessageDlg("'Maschinen.ini' Datei nicht vorhanden!",mtError,TMsgDlgButtons() << mbOK,0); Close(); } f.close();
Ich weiss nicht warum.
Die Version von CodeGuard ist 5.1.3
-
Rave173 schrieb:
Der vollständige Code ist
...
Ich weiss nicht warum.
Die Version von CodeGuard ist 5.1.3Hi,
ich seh da jetzt auch keinen Fehler. Aber mir ist schon ab und an mal aufgefallen, daß CodeGuard Fehler meldet wo keine sind.
mfg Martin
-
Was soll der Code überhaupt machen? Wofür sind die beiden StringList-Variablen?
Du greifst z.B. mitif (AnsiPos(worte->Strings[3], D) != 0)
auf nicht-allokierten Speicher zu (denn die Liste ist ja leer).
Und fehlt bei
split(wort2,D,'=');
ein 'e' (worte2)?
-
Hi,
die Sachen habe ich versehen hier gelöscht
AnsiString sFile = ExpandFileName(ParFileName); TStringList *worte = new TStringList(); TStringList *worte2 = new TStringList(); split(worte,sFile,'\\'); ...
Die Sachen mit worte/worte2 sind nicht leer
Das habe ich mir schon fast gedacht, weil ich auch kein Fehler finde
Kann man da irgend was machen ?
-
habe was vergessen zu schreiben
Die Fehler Meldung ist in #include <fstream>... // TEMPLATE FUNCTION _Fgetc template<class _Elem> inline bool _Fgetc(_Elem& _Ch, _Filet *_File) { // get an element from a C stream return (fread(&_Ch, sizeof (_Elem), 1, _File) == 1); } template<> inline bool _Fgetc(char& _Byte, _Filet *_File) { // get a char element from a C stream int _Meta; if ((_Meta = fgetc(_File)) == EOF) <--- Hier kommt der erste Fehler return (false); else { // got one, convert to char _Byte = (char)_Meta; return (true); } } ...
Der Fehler wird dadurch ausgelöst
datei.getline(D, 255);