2011-01-01 8 views
1

Meine C++ Programm kompiliert und arbeitet, bis ich diese Funktion aus dem Haupt() aufrufen:"Eine Zugriffsverletzung (Segmentierungsfehler) in Ihrem Programm ausgelöst."

int uword(){fstream infile("numbers.txt"); 
fstream exfile("wordlist.txt"); 
string numb[numoflines]; 
string lines[numoflines]; 
number = 1; 
line = 1; 
for(int i=0;i<numofline;++i) 
    { 
    getline (infile,number); 
    numb[i] = number; //I think this is causing the problem 
    getline (exfile,line); 
    lines[i] = line; //This too 
    } 
infile.close(); 
exfile.close();  
string yourword; 

Etwas hier führt es zum Absturz zu bringen, in dem Debug erscheint es mit „eine Zugriffsverletzung (Segmentation Fault) erhöht in dein Programm. "

EDIT: Mein Fehler wurde verwendet! Infile.eof in der for-Schleife.

+0

Ihre Eingangsschleife ist falsch. GMan gab eine gute Erklärung, wie man Eingaben in [einer Antwort auf eine der C++ FAQ-Fragen] richtig handhabt (http://stackoverflow.com/questions/4258887/semantics-of-flags-on-basic-ios/4259111#) 4259111). –

+0

Das Ändern von! Infile.eof() zu i <= numoflines (was dasselbe tun sollte) gibt mir immer noch den Fehler. Ich denke, das ist es, was Sie mit Ihrer Referenz gemeint haben. – Mark

+0

Meinst du i

Antwort

1

Die Funktion getline funktioniert nicht so, wie Sie denken, dass sie funktioniert.

Auch könnte es mehr als numoflines Linien in infile geben.

+0

Könnten Sie die richtige Verwendung von 'getline' näher erläutern? numoflines wurde zuvor anhand der Anzahl der Zeilen in der Datei berechnet. – Mark

+0

@Mark: Siehe 'man 3 getline'. Es ist für die Verwendung mit C 'FILE *' - Handles gedacht, und Sie versuchen es hier mit einem 'fstream' zu verwenden. Sie sollten 'infile >> number' verwenden, um einen C++ - Stil' ifstream' zu verwenden. – Borealid

+0

Ich benutze getline, weil es scheint, für diesen Zweck zu arbeiten. Infile >> Nummer würde nur die ganze Datei auf Nummer rechts schreiben? – Mark

3

keine direkte Antwort, aber ich glaube, es ist ein guter ...

Verwendung Der Debugger! GDB sollte die genaue Linie aussetzen, wenn der Segmentierungsfehler auftritt, und gibt Ihnen damit einen sehr guten Hinweis auf den Fehler.

+0

Das hat geholfen, ich habe das OP mit dem Problem bearbeitet. – Mark

Verwandte Themen