Я использую библиотеку для разбора файла .pgn, и когда я пытался запустить проект, я нашел эту ошибку: Debug Assertion Failed! программа: C: \ windows \ SYSTEM32 \ MSVCP110D.dll Файл: c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ xstring Строка: 79 Выражение: string iterator не является неразрешимым Для получения информации о том, как ваш программа может вызвать ошибку утверждения, см. визуальную документацию на C++ для утверждений.string iterator is not dereferencable
проблема заключается в том, что, когда итератор достигает конца файла, он ничего не указывает (запустите итератор (itr1) == end iterator (itr2)), я попытался добавить условия, чтобы проверить, достиг ли itr1 к конец файла, но это было бесполезно. Итак, пожалуйста, скажите мне, где моя вина. вот мой код source.cpp файла:
#include <iostream>
#include <fstream>
#include <PGNGameCollection.h>
int main()
{
std::ifstream pgnfile("sample.pgn");
pgn::GameCollection games;
pgnfile >> games;
std::cout << "the file sample.pgn contains " << games.size() << "games" << std::endl;
system("pause");
return 0;
}
и здесь есть функция класса, который вызывает ошибку:
bool pgn::Parser::getComment(std::string::const_iterator &itr1, const std::string::const_iterator &itr2, pgn::CommentText &out)
{
std::string::const_iterator local_itr=itr1;
std::string comment;
if(*local_itr != '{')
return false;
local_itr++; //skipping '{'
while((*local_itr != '}') && (local_itr != itr2))
{
comment += *local_itr++;
}
local_itr++; //skipping '}'
skipBlanks(local_itr, itr2);
itr1=local_itr;
out=pgn::CommentText(comment);
return true;
}
skipBlanks функции:
void pgn::Parser::skipBlanks(std::string::const_iterator &itr1, cost std::string::const_iterator &end)
{
while((itr1 != end) && (isspace(*itr1)))
{
itr1++;
}
}
Я искал StackOverflow и google для всех подобных проблем, но я не смог найти ответ. также я проследил код строки за строкой, пока не добрался до функции, вызвавшей ошибку.
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
Я уже отлаживал код по очереди, прежде чем спрашивать здесь, но я не смог найти ответ! –
Тогда вы, вероятно, используете отладчик неправильно. –