2016-03-22 12 views
0

Ich kann nicht herausfinden, was mit meinem Code falsch ist. Ich habe zusätzliche Uhren verwendet, um sicherzustellen, dass die Informationen korrekt gelesen und in das Array eingegeben wurden. Der Fehler, den ich erhalte, ist:Zugriffsverletzung schreiben Ortung

Zugriffsverletzung Schreibort.

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 
//string name; 
//double id = 0; 
int numQ = 0; 
int numA = 0; 

string temp; 
string arrayQ[50]; 
string arrayA[50]; 

fstream SaveFile; 
SaveFile.open("TestBank.txt", ios::in); 
while (!SaveFile.eof()) 
{ 
    getline(SaveFile, temp, '#'); 
    if (temp.length() > 5) 
    { 
     arrayQ[numQ] = temp; 
     numQ++; 
    } 
    else 
    { 
     arrayA[numA] = temp; 
     numA++; 
    } 
} 
SaveFile.close(); 

cout << "The question is\n" << arrayQ[0] << endl; 
cout << "The answer is\n" << arrayA[0] << endl; 

return 0; 
} 
+0

Haben Sie mehr als 50 Fragezeilen oder mehr als 50 Antwortzeilen? – immibis

+0

Meine beste Schätzung ist, dass 'numQ' und/und' numA'> 49 bekommen. Können Sie das überprüfen? – DimChtz

+0

Nein ich habe genau 50 Zeilen. numQ und numA erreichen beide 50. So sieht eine der Zeilen aus, die ich gerade einlese: CD steht für Sammel-CD? # FALSCH # – suprkain

Antwort

1

Sie Zuerst sollte nicht in einer Schleife auf eof in C++.

Dann sollten Sie sicherstellen, dass numQ und numA nicht bekommen Grenzen aus, als ihr Wert auf dem Dateiinhalt abhängig:

... 
while (getline(SaveFile, temp, '#')) 
{ 
    if (temp.length() > 5) 
    { 
     if (numQ>=50) 
      cerr << "Ouch ! numQ=" <<numQ<<endl; 
     else arrayQ[numQ] = temp; 
     numQ++; 
    } 
    else 
    { 
     if (numA>=50) 
      cerr << "Ouch ! numA=" <<numA<<endl; 
     else arrayA[numA] = temp; 
     numA++; 
    } 
} 

Schließlich könnte man erwägen vector<string> anstelle von String-Arrays verwenden. In diesem Fall würden Sie einfach push_back() die Strings im richtigen Vektor ohne sich um eine vorgegebene Größe kümmern müssen.

+0

Ich habe noch keine davon gelernt, aber ich werde es versuchen Voraus und sehen, ob ich diese verstehe. – suprkain