STL 2D矢量致命运行时错误

时间:2012-01-04 14:35:38

标签: c++ stl vector

我有以下代码:

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

在运行时期间,在我的代码的第三行,我得到一行'_SCL_SECURE_VALIDATE_RANGE(_Pos&lt; size())抛出的'致命错误';“在矢量标准标题中,这可能是因为它不喜欢我尝试在设置大小之前索引到vectObjVects。

在填充任何值之前,建议在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 :(得分:0)

您发布的代码似乎没有错误(见下文)。

您问题的最可能解释是:

  • 您发布的代码与您正在运行的代码不完全匹配。
  • 您认为不相关的其他一些代码正在与您的向量进行交互,可能会破坏它们存储的内存。

我的建议是,在调用vectObjVects之前,您使用调试器检查reserve的状态。如果看起来没问题,请进入保留代码并查看_Possize()的值。它们应该是010 - 如果它们不是那么应该指向正确的方向。


以下代码完全按预期编译和运行:

#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);
}

答案 1 :(得分:-1)

只要知道向量应该有多长,就可以使用resize()来保留所需的“空格”。您的代码可能会失败,因为ObjVect没有大小,因为向量是空的。