Я использую следующий глупый код:
std::vector<wxString> m_redoSteps;
...
m_redoSteps.clear();
Когда я компилирую с Visual Studio 6 или GCC, m_redoSteps.clear () работает нормально, когда я использую Visual Studio 2010, появляется утверждение «несовместимые векторные итераторы» (что приводит к сбою в сборке релиза).
Есть идеи, что здесь не так?
—
Изменить: добавление еще одной строки кода:
std::vector<wxString> m_redoSteps;
...
if (!m_redoSteps.empty())
{
// do something in case it is not empty - which isn't in my case
...
}
m_redoSteps.clear(); // first call leads to the assertion...
Установите Visual Studio 2010 SP1, см. Этот отчет об ошибке: http://connect.microsoft.com/VisualStudio/feedback/details/545013
Обновление (14 апреля 2015 г.):
Описание ошибки 545013: ограничение vector :: erase возвращает несовместимый итератор в отладочной сборке.
Оригинальная ссылка http://connect.microsoft.com/VisualStudio/feedback/details/545013 недоступен, однако кеш оригинальной ошибки здесь http://web.archive.org/web/20140727031651/http://connect.microsoft.com/VisualStudio/feedback/details/545013
Ошибка была устранена в Visual Studio SP 1, как описано здесь Описание пакета обновления 1 для Visual Studio 2010
Других решений пока нет …