Ich lerne C++ und ich habe ein Problem mit einem Segmentierungsfehler. In meinem Projekt möchte ich von einer Datei in einen 2d Vektor von char lesen. Der Vektor ist std::vector<std::vector<char>> gamearea;
Segmentierungsfehler in push_back für einen 2d Vektor
void Structure::readFile(const std::string filename)
{
std::ifstream file(filename.c_str());
if (!file.is_open())
{
std::cerr << "Error opening file: " << filename << std::endl;
exit(1);
}
std::string line;
int i = 0;
while (true)
{
std::getline(file, line);
if (file.eof())
{
break;
}
for (size_t j = 0; j< line.length(); j++)
{
gamearea[i].push_back(line[j]);
}
i++;
}
}
Diese meine Lesedatei Funktion ist und der Debugger (I gdb) sagt von push_back
ist ein Segmentierungsfehler.
Kann mir jemand helfen? Ich kann das Problem nicht finden.
'gameArea [i] .push_back (line [j])' - ändere dies in 'gameArea.at (i) .push_back (line [j])', und sei nicht überrascht, wenn du jetzt ein 'out_of_range' Ausnahme anstelle eines Segmentierungsfehlers. Mit anderen Worten, es gibt kein 'GameArea [i]' da 'i' ein ungültiger Index ist. – PaulMcKenzie
Können Sie mir erklären, warum ich ein ungültiger Index bin und was ich ändern muss? Ich möchte im Vector die Zeilen eines Spielbereichs speichern und in anderen Funktionen brauche ich die genaue Position der Dinge im Spiel wie die Figur und die Boxen. Ich dachte, ich könnte mit i sagen, mit der Zeile ist es und mit der Zeile [j] speichern Sie das Zeichen im Vektor, so dass ich die Zeile und die Spalte des Zeichens kenne. – Lisa