Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicherzugriffsfehler bei fstream und strtof()



chiffi
03-01-2005, 19:19
Hi Leute!

Hoffe das Problem ist vlcht. interessanter zu lösen als meine vorrigen Fragen :p
Ich habe ein Programm geschrieben, das erstmal Variablen in eine Datei reinschreibt und dann wieder rausliest, weil ich diese Aktionen für ein Programm brauche. Der erste Teil funktioniert fehlerfrei, alles getestet, bis zu file.seekg(sizeof(char[7]),ios::beg); , ab da bin ich mir nicht sicher was richtig ist. Kompilieren funktioniert fehlerfrei mit g++-3.3. Wenn ich die Datei jedoch ausführe, kommt ein Speicherzugriffsfehler. Ein Kumpel von mir hatte auch einen Speicherzugriffsfehler als er in einem SDL-Programm Funktionen in falscher Reihenfolge aufgerufen hat, vlcht. hilft das ja, ich bin ratlos. :confused:

./test
File successfully opened
Bitte geben Sie das Jahr (bis 2038) des Ereignisses an: 2005

Bitte geben Sie den Monat an: 12
Speicherzugriffsfehler
playa@debian:~/programmieren/fstream$




#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;





int main()
{
float fvar;
int year;
int month;



fstream file("name.txt",ios::in | ios::out | ios::trunc);
if (file.is_open()) {
cout << "File successfully opened\n"; }
else cout << "File is not opened succesfully \n";


cout << "Bitte geben Sie das Jahr (bis 2038) des Ereignisses an: "; /*weiter kann die Countdownroutine nicht*/
cin >> year;
if (year < 2039 || year >2004) //zwischen 2005-2038 "year =2005" z.b.
file << "year =" << year << endl;
else {
cout << "\nBitte neu starten.. \n"; //wenn nicht richtige Eingabe dann Ende
return 0;
}


cout << "\nBitte geben Sie den Monat an: "; //Monat eingeben und reinschreiben "month =08" z.b.
cin >> month;
if (month < 13 || month > 0) {
file << "month =" ;
if (month <10)
file << 0;
file << month;
}
else {
cout << "Bitte neu starten.. \n";
return 0;
}


/* YEAH hier kommt filelesen */
file.seekg(sizeof(char[7]),ios::beg); //gehe auf jahreszahl
char *ch;
file >> ch;
fvar = strtof (ch,NULL);
cout << "fvar: " << fvar << endl;
file.close();




return 0;
}

quinte17
03-01-2005, 19:31
char *ch;
file >> ch;


du schreibst hier in einen pointer (der noch auf nichts bestimmtes zeigt) rein, somit willst du auf speicher schreiben, der nicht für dein programm bestimmt ist -> speicherzugriffsfehler...

du musst erst etwas speicher reservieren bevor du sowas machst...

greetz

the_easterbunny
03-01-2005, 20:20
if (month < 13 || month > 0) {
file << "month =" ;
if (month <10)
file << 0;
file << month;
}
else {
cout << "Bitte neu starten.. \n";
return 0;
}

ausserdem macht diese if abfrage nicht viel sinn - die bedingung ist immer wahr
(ich glaube du meinst:


if ((month < 13) && (month > 0))
...
)

das selbe gilt bei der abfrage mit dem jahr