STL 2D矢量致命运行时错误
STL 2D Vector Fatal Runtime Error
我有以下代码:
vector<vector<Obj> > vectObjVects(10);
vectObjVects[0].reserve(100);
在运行时,在代码的第三行,我得到了一个由_SCL_SECURE_VALIDATE_RANGE(_Pos<size())行引发的"致命错误";"在矢量标准标头中,这可能是因为它不喜欢我在设置大小之前尝试索引到vectObjVects。
在填充任何值之前,在2D向量的内部向量中保留空间的推荐方法是什么?
EDIT-根据请求添加的对象类:
class Obj
{
public:
Obj(int a, int b):iA(a), iB(b) {}
Obj():iA(0), iB(0) {}
int iA;
int iB;
};
您发布的代码中似乎没有错误(请参阅下文)。
对您的问题最可能的解释是:
- 您发布的代码与您正在运行的代码不完全匹配
- 其他一些你认为不相关的代码正在与你的向量交互,可能是破坏了它们存储的内存
我的建议是,在调用reserve
之前,使用调试器检查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);
}
一旦知道向量应该有多长,就可以使用resize()来保留所需的"空间"。您的代码可能会失败,因为ObjVect没有大小,因为向量是空的。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 由于 2D 数组声明,C++ 14 中的运行时错误
- 2d 数组运行时错误 "std::bad_alloc()" what()
- 定义大小 (n*m) 的 2d 数组时运行时错误 >=10^6
- C++2d数组运行时错误
- 2d数组导致运行时错误
- STL 2D矢量致命运行时错误
- 2D矢量调整运行时错误