我有以下代码:
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;
};
答案 0 :(得分:0)
您发布的代码似乎没有错误(见下文)。
您问题的最可能解释是:
我的建议是,在调用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);
}
答案 1 :(得分:-1)
只要知道向量应该有多长,就可以使用resize()来保留所需的“空格”。您的代码可能会失败,因为ObjVect没有大小,因为向量是空的。