2013-11-27 8 views
7

So, hier ist mein Fehler:Verständnisfehler "Terminate nach dem Werfen einer Instanz namens 'std :: length_error' was(): basic_string :: _ S_create Aborted (core dumped)"

terminate called after throwing an instance of 'std::length_error' 
    what(): basic_string::_S_create 
Aborted (core dumped) 

und hier ist mein Code:

//Code removed 

string generateSong(string list[], int num) 
{ 
    //Code removed 

    //Code removed 

    for (i = 0; i < num; i++) 
    { 
     output += list[i]; 
     output += bone1; 
     output += list[i + 1]; 
     output += bone2; 
    } 

    return output; 
} 

int main() 
{ 
    string list[9] = 
    { 

    //Code removed 

    }; 

    //Code removed 

    return 0; 
} 

ich möchte nur wissen, was dieser Fehler bedeutet, so weiß ich, wie es zu beheben. Ich habe viele Beiträge mit ähnlichen Fehlern gesehen, aber nichts genau das gleiche. Ich beginne buchstäblich nur in C++ und keine dieser Antworten macht Sinn mit dem, was ich bisher gelernt habe. Wie Sie sehen können, ist dies ein einfaches Programm, um einen Song auszugeben. Es soll mir helfen, Saiten für die Klasse zu üben, die ich mache, aber es macht absolut keinen Sinn für mich und das Buch ist auch nicht viel Hilfe. Könnte mir bitte jemand das erklären?

P.S. Falls dies hilfreich ist, wird es mit g ++ kompiliert, aber wenn es ausgeführt wird, gibt es diesen Fehler (also ist es im Grunde kein Kompilierungsfehler, es ist ein Lauffehler).

+0

Um zu debuggen können Sie list.at (i) und list.at (i + 1) verwenden und diese sagen Ihnen Indexüberschreitungen mit einer hilfreicheren Nachricht in der Regel. – emsr

Antwort

8

Dieser Teil des Codes ist verdächtig:

for (i = 0; i < num; i++) 
{ 
    output += list[i]; 
    output += bone1; 
    output += list[i + 1]; // <--- here 
    output += bone2; 
} 

Ihre Arraylänge hat 9, so dass die gültige Indizes darin liegt im Bereich von 0, 1, 2, ..., 8. Auf Iteration 8, die Die angegebene Zeile versucht, den Array-Index 9 zu lesen, der nicht gültig ist. Dies führt zu undefiniertem Verhalten, was in Ihrem Fall eine irreführende Fehlermeldung über eine ungültige Zeichenfolge ist.

Sie müssen entscheiden, welche Schritte Sie ergreifen möchten, um dies zu beheben, aber ich glaube, dass dies die unmittelbare Ursache des Problems ist.

Hoffe, das hilft!

+1

Vielen Dank! Du warst völlig korrekt. Als Sie darauf hingewiesen haben, wurde mir klar, dass das der Fehler war. In meiner Klasse sind wir kürzlich von der Verwendung von Arrays zur Verwendung von Strings übergegangen und ich bin daran gewöhnt, dass Arrays nur Jargon anzeigen, wenn sie vom Array ablaufen, während Strings anders sind. Wie auch immer, vielen Dank euch beiden. Es war genau das, was benötigt wurde, und ich korrigierte die for-Schleife richtig angezeigt. :) – scbeacham

2

Wenn Sie 9 Knochen haben, sollten Sie nur 8 Verbindungen drucken, nicht 9. Auf der letzten verweisen Sie bone[8] & bone[9]. bone[9] existiert nicht.

Verwandte Themen