我得到一个堆栈溢出上的这第一次迭代的for循环堆栈溢出访问的大载体
for (int q = 0; q < SIZEN; q++)
{
cout<<nList[q]<<" ";
}
NLIST是376个项目类型为int的载体。 nList的大小取决于程序中定义的常量。该程序适用于每个值高达376,然后在376之后停止工作。
有什么想法?
我得到一个堆栈溢出上的这第一次迭代的for循环堆栈溢出访问的大载体
for (int q = 0; q < SIZEN; q++)
{
cout<<nList[q]<<" ";
}
NLIST是376个项目类型为int的载体。 nList的大小取决于程序中定义的常量。该程序适用于每个值高达376,然后在376之后停止工作。
有什么想法?
如果通过“停止工作”,你的意思是崩溃,那么你可能正在读缓冲区的末尾。 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 << " ";
}
我最初在这里猜测是矢量小于376. []
运营商不作为guaratees遍历实际的向量边界。你会非常非常安全,如果您使用的at
功能:
for(int i=0; i < nList.size(); ++i){
cout << nList.at(q) << " ";
}
那里,如果q
是它会抛出一个异常向量之外。这将有助于诊断这种类型的运行时问题。
如果通过使用例如push_back将376个元素添加到矢量中,那么使用值高于376的访问会导致程序失败,这是正常的,但您确实在访问未初始化的内存和未管理的内存。
显示如何填充和定义nList。 – 2010-04-25 13:05:18
376项目是没有办法“大”:)。 – kennytm 2010-04-25 13:06:55
使用nList.size()代替SIZEN作为循环控制条件会不会更好? – 2010-04-25 13:08:14