筛网访问错误

时间:2019-03-26 18:20:14

标签: c++ sieve

我的代码块运行,但是每当我输入输入时,它都会返回线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x4)。我对编码还很陌生,想知道哪里出了问题。

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int x, count = 1;
    cin >> x;
    vector<int> sieve;
    fill(sieve.begin(), sieve.begin()+x-1, 1);
    while (count <= x) {
        for (int i = count+1; i <= x; i++) {
            if (sieve[i-1] == 1) {
                count = i;
                break;
            }
        }
        for (int i = count*count; i < x; i+=count) {
            sieve[i-1] = 0;
        }
    }
    for (int i = 0; i < x-1; i++) {
        if (sieve[i] == 1) {
            cout << i+1 << endl;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您需要为筛子分配空间。因此,您可能需要vector<int> sieve(x)。或者,您甚至可以执行vector<int> sieve(x, 1),这将为x个int分配空间并已经用1填充它们,因此以后就不需要fill