堆栈溢出访问大矢量

cam*_*cam 1 c++ stack-overflow

我在这个for循环的第一次迭代中得到了堆栈溢出

for (int q = 0; q < SIZEN; q++)
{
    cout<<nList[q]<<" ";
}
Run Code Online (Sandbox Code Playgroud)

nList是int类型的向量,包含376个项目.nList的大小取决于程序中定义的常量.该程序适用于高达376的每个值,然后在376之后它停止工作.

有什么想法吗?

Ale*_*ski 6

如果"停止工作",你的意思是崩溃,那么你可能正在读取超过缓冲区的末尾.vector::operator[]没有范围检查,所以它会让你自己射击脚.

如果要遍历向量,请使用迭代器,或者至少nList.size().

因此,对代码的修改最少:

for (int q = 0; q < nList.size(); q++)
{
    cout << nList[q] << " ";
}
Run Code Online (Sandbox Code Playgroud)

或者使用迭代器

for (std::vector<int>::const_iterator it = nList.begin();
     it != nList.end(); ++it) {
  cout << *it << " ";
}
Run Code Online (Sandbox Code Playgroud)