2017-05-16 8 views
-1

Ich versuche, Zeilen aus einer Textdatei in ein Array von string zu setzen, aber ich bekomme eine Ausnahme geworfen und ehrlich gesagt bin ich ahnungslos, was ich tun soll.Ausnahme beim Versuch, ifstream zu verwenden

Hier ist das Stück Code, um die Datei Handhabung:

ifstream names("Vehicle_names.txt"); 
    string vehnames[54]; 
    if (names.bad()) 
    { 
     return 1; 
    } 
    while (names) 
    { 
     names >> vehnames[i++]; 
    } 
    i = 0; 
    while (i < 54) 
    { 
     cout << endl << vehnames[i]; 
     i++; 
    } 

Die Ausnahme neben der folgenden Zeile in iosfwd geworfen wird:

static void __CLRCALL_OR_CDECL assign(_Elem& _Left, const _Elem& _Right) _NOEXCEPT 
     { // assign an element 
     _Left = _Right; 
     } 

Und der Fehler sagt:

Excpetion thrown: write access violation 
_Left was 0xCCCCCCCC. 

Ich würde es wirklich schätzen, wenn Sie mir dabei helfen könnten, ich werde verrückt, wenn ich versuche, etwas dagegen zu tun.

Ich schreibe mit Visual Studio 2017, wenn es hilft.

+0

Zeit zum Kennenlernen [Ihres Debuggers] (https://msdn.microsoft.com/en-us/library/k0k771bt.aspx) –

+0

Die 'Schreibzugriffsverletzung' ist fast sicher, weil Sie 'i' verwenden als Array-Index in 'vehnames' bevor' i' jemals initialisiert wird; Sie können also nicht vorhersagen, was der Wert von i sein könnte. Es kann alles sein, und C++ überprüft zur Laufzeit nicht, dass Sie nur Indizes im Bereich von einfachen Arrays verwenden. Stattdessen erhalten Sie wahrscheinlich eine Ausnahme vom Betriebssystem selbst, wenn festgestellt wird, dass Sie versuchen, auf Speicher zuzugreifen, den Sie nicht verwenden sollten. –

Antwort

0

Zuerst sieht es so aus, als ob Sie i ohne Deklaration i verwenden. Als nächstes stellen Sie sicher, dass i nicht auf einen Ort zeigt, wo es nichts zu finden gibt. Vielleicht versuchen Sie so etwas ...

ifstream names("Vehicle_names.txt"); 
int i = 0; 
string vehnames[1028]; //ensure there is enough memory allocated to store txt file in string array 
if (names.bad()) 
    return 1; 
while (names.good()) 
     names >> vehnames[i++]; 
int j = 0; 
while(j<i) 
    cout << vehnames[j++] << endl; 
return 0; 

Obwohl die Lösung ist unwichtig. Versuchen Sie zu verstehen, wie der Code funktioniert. ... und bleiben Sie dran!

Verwandte Themen