libc++abi.dylib: Abbruch mit uncaught exception vom Typ std::out_of_range: basic_string Fehler?
Hier ist eine Funktion, die ich Schreibe, die erhält einen string von Wörtern, getrennt durch Leerzeichen und fügt jedes Wort in ein array. Ich erhalte eine Fehlermeldung, die sagt "libc++abi.dylib: Abbruch mit uncaught exception vom Typ std::out_of_range: basic_string." Ich kann nicht scheinen, um herauszufinden, was der Fehler ist.
void lineParser(string line, string words[])
{
string word = "";
int array_index = 0;
int number_of_words = 1;
int string_index = 0;
while (string_index < line.length())
{
if (line.substr(string_index,1) != " ")
{
int j = string_index;
while (line.substr(j,1) != " ")
{
word += line.substr(j,1);
j++;
}
words[array_index] = word;
array_index++;
word = "";
number_of_words++;
string_index = j;
}
else
{
string_index++;
}
}
}
- Sie sollten übergeben Sie einen Verweis auf ein in der Größe veränderbares container wie std::vector, um Ihre Funktion anstatt der array-pointer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Variable
j
ist erlaubt, zu erhöhen, ohne bounds checking auch. Es wird schließlich excede die Länge der Zeichenfolge, die Sie verwenden es als index in (.line.substr(j,1)
).Eine sehr schlechte Antwort wäre, fügen Sie ein Leerzeichen am Ende der Zeichenfolge
line
vor der Suche nach' '
Zeichen. Eine viel bessere Antwort ist zu überprüfen, j gegen die Länge der Zeichenfolge vor dem Aufruf jeder Funktion die den Zugriff auf die Zeichen im string verwenden Sie es als ein index.Du hast keine überprüfung von array-Grenzen beim Zugriff auf
words
. Wenn das array übergeben, nicht genügend Speicherplatz, führen Sie über das Ende des Arrays.Wie haben Sie darauf hingewiesen, unter, dass ist nicht unbedingt das problem, aber es ist unmöglich zu sagen, ohne dass der rest des Codes (Haupt -, zum Beispiel). Es ist auch wirklich schlimm-code, Sie sollten nie einfach davon ausgehen, dass Sie wissen, die Länge eines Arrays, je. Du bist mit C++, make Verwendung von STL-Containern. Es erspart dir unnötige Kopfschmerzen im Zusammenhang mit arrays.