Плохой доступ на сите - PullRequest
0 голосов
/ 26 марта 2019

Мой блок кода выполняется, но всякий раз, когда я набираю ввод, он возвращает поток 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 Ответ

1 голос
/ 26 марта 2019

Вам нужно выделить место для своего сита.Так что вы можете захотеть vector<int> sieve(x).Или вы можете даже сделать vector<int> sieve(x, 1), который выделит место для x-целых и заполнит их все 1-ю уже, так что вам не понадобится fill впоследствии.

...