运行时错误:矢量下标超出范围

时间:2014-08-11 09:29:15

标签: c++ runtime-error

所以,我写了这段代码:

int main()
{
int max;
cin >> max;

vector<int> nums;
for (int i = 2; i <= max; i++)
{
    nums.push_back(i);
}

for (int i = 2; i <= max/10; i++)
{
    for (int j = i; j <= max; j += i)
    {
        nums[j - 2] = nums.back(); // problem maybe here
        nums.pop_back();
    }
}

for (int x : nums)
{
    cout << x << "\n";
}
}

输入max的值后,我得到运行时错误。我包括iostream,字符串,向量,算法,cmath和使用命名空间std。我不知道问题出在哪里。

1 个答案:

答案 0 :(得分:0)

为什么不把各种陈述

cout << "vector size is " << nums.size() << '\n';

进入您的代码并可能在循环期间看到j

然后,您将看到下标超出范围的位置。请注意,每次执行nums.pop_back()时,您的矢量大小都会减少1.这会发生在您的内循环中。