Сбой при нарушении доступа к вектору VC ++ 6.0. Известная ошибка? - PullRequest
1 голос
/ 04 марта 2009

Я пытаюсь использовать std :: vector <> :: const_iterator, и у меня происходит сбой "нарушения доступа" Похоже, что код std :: vector падает, когда он использует свои собственные внутренние указатели First_ и Last_. Предположительно это известная ошибка. Я надеюсь, что кто-то может указать мне правильный обходной путь. Возможно, уместно вызывать функцию сбоя из внешней библиотеки?

const Thing const*  AClass::findThing (const std::string& label) const
{
    //ThingList_.begin() blows up at run time.  Compiles fine.
    for (std::vector<Thing*>::const_iterator it = ThingList_.begin(); it != ThingList_.end(); ++it) {
        //Irrelevant.
    }
    return 0;
}

Простой вызов ThingList_.size() также дает сбой.

Это sp6, если это имеет значение.

Ответы [ 3 ]

4 голосов
/ 04 марта 2009

Если вы передаете объекты C ++ через границы внешних библиотек, вы должны убедиться, что все библиотеки используют одну и ту же библиотеку времени выполнения (в частности, один и тот же распределитель кучи). На практике это означает, что все библиотеки должны быть связаны с версией DLL MSVCRT.

1 голос
/ 04 марта 2009

Это почти наверняка ошибка в вашем коде, а не std :: vector. Этот код используется слишком многими проектами, чтобы иметь такую ​​легко воспроизводимую ошибку.

Вероятно, что переменная ThnigList_ каким-то образом повреждена. Был ли доступ к базовому массиву напрямую и / или изменен?

0 голосов
/ 04 марта 2009

Я согласен с Джаредом, что это, вероятно, в вашем коде, тем не менее, вы должны быть уверены, что ваши последние версии обновлены.

На сайте dinkumware есть исправленные файлы, которые вам нужны.

Вы должны обновить, чтобы быть в безопасности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...