我在for循环的第一次迭代中得到了堆栈溢出
for (int q = 0; q < SIZEN; q++)
{
cout<<nList[q]<<" ";
}
nList是int类型的向量,包含376个项目。 nList的大小取决于程序中定义的常量。该程序适用于高达376的每个值,然后在376之后它停止工作。
有什么想法吗?
答案 0 :(得分:6)
如果“停止工作”,你的意思是崩溃,那么你可能正在读取超过缓冲区的末尾。 vector::operator[]
未经过范围检查,所以它会让你自己射击。
如果要遍历矢量,请使用迭代器,或至少nList.size()
。
所以对代码的修改最少:
for (int q = 0; q < nList.size(); q++)
{
cout << nList[q] << " ";
}
或使用迭代器
for (std::vector<int>::const_iterator it = nList.begin();
it != nList.end(); ++it) {
cout << *it << " ";
}
答案 1 :(得分:1)
我在这里的初步猜测是向量小于376. []
运算符没有保证运行实际的向量边界。如果使用at
函数,那么你会更安全,更安全:
for(int i=0; i < nList.size(); ++i){
cout << nList.at(q) << " ";
}
那里,如果q
在向量之外,它将抛出异常。这将有助于诊断此类运行时问题。
答案 2 :(得分:0)
如果您通过使用例如push_back向向量添加了376个元素,则通常情况下,值大于376的访问会导致程序失败,您正在访问肯定未初始化且未受管理的内存。