Я изучаю C++, и у меня есть проблема с ошибкой сегментации. В моем проекте я хочу прочитать из файла в 2d-вектор char. Вектор является std::vector<std::vector<char>> gamearea;
Ошибка сегментации в push_back для 2d-вектора
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++;
}
}
Это моя функция чтения файла и отладчик (я использую GDB) говорит по push_back
является ошибкой сегментации.
Может кто-нибудь мне помочь? Я не могу найти проблему.
'gameArea [i] .push_back (строка [j])' - измените это на 'gameArea.at (i) .push_back (строка [j])', и не удивляйтесь, если вы сейчас получите исключение out_of_range' вместо ошибки сегментации. Другими словами, нет 'gameArea [i]', поскольку 'i' является недопустимым индексом. – PaulMcKenzie
Можете ли вы объяснить мне, почему я недействительный индекс и что мне нужно изменить? Я хочу сохранить в Vector строки игрового поля и в других функциях мне нужно точное положение вещей в игре, как на рисунке и в блоках. Я думал, что могу сказать с i строкой, и с линией [j] сохранить символ в векторе, чтобы я знал строку и столбец символа. – Lisa