STL 2D Vector Fatal Runtime Ошибка - PullRequest
       4

STL 2D Vector Fatal Runtime Ошибка

0 голосов
/ 04 января 2012

У меня есть следующий код:

vector<vector<Obj> > vectObjVects(10);
vectObjVects[0].reserve(100);

Во время выполнения в третьей строке моего кода я получаю 'Fatal Error', выдаваемую строкой _SCL_SECURE_VALIDATE_RANGE (_Pos

Каков рекомендуемый способ зарезервировать пространство во внутренних векторах 2D-вектора до того, как будут заполнены какие-либо значения?

РЕДАКТИРОВАТЬ - класс Obj добавлен согласно запросу:

class Obj
{
public:
Obj(int a, int b):iA(a), iB(b) {} 
Obj():iA(0), iB(0) {}
int iA;
int iB;
};

Ответы [ 2 ]

0 голосов
/ 04 января 2012

В коде, который вы опубликовали, нет ошибок (см. Ниже).

Наиболее вероятные объяснения вашей проблемы:

  • Код, который вы опубликовалине совсем соответствует тому, что вы используете.
  • Другой код, который, по вашему мнению, не связан, взаимодействует с вашими векторами, возможно, из-за повреждения памяти, в которой они хранятся.

МойПредполагается, что вы используете отладчик для проверки состояния vectObjVects непосредственно перед вызовом reserve.Если это выглядит нормально, перейдите к коду для резерва и посмотрите, каковы значения _Pos и size().Они должны быть 0 и 10 - если это не так, это должно указать вам правильное направление.


Следующий код компилируется и выполняется точно так, как ожидается:

#include <vector>

class Obj
{
public:
Obj(int a, int b):iA(a), iB(b) {} 
Obj():iA(0), iB(0) {}
int iA;
int iB;
};

int main() {
  std::vector<std::vector<Obj> > vectObjVects(10);
  vectObjVects[0].reserve(100);
}
0 голосов
/ 04 января 2012

Как только вы узнаете, как долго должен быть вектор, вы можете использовать resize (), чтобы зарезервировать требуемое «пространство». Ваш код, вероятно, не работает, потому что ObjVect не имеет размера, поскольку вектор пуст.

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