@avion123678

Размер массива в C++?

В коде используется Решето Эратосфена (при аргументе n <= 1.000.000 все работает нормально:
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

void fff(int n) {

    int s[n+1], j = 0;

    s[1] = 0;

    for (int i = 2; i <= n; i++) {
        s[i] = 1;
    }

    for (int i = 2; i * i <= n; i++) {
        if (s[i] == 1) {
            for (int l = i * i; l <= n; l += i) {
                s[l] = 0;
            }
        }
    }

    for (int i = 2; i <= n; i++) {
        if (s[i] == 1) {
        cout << i << " ";
        j++;
        }
    }

    cout << endl;
    cout << j;
}

int main() {
    fff(1000000);

    return 0;
}

Вывод программы:
2 3 5 7 ...
78498
Process finished with exit code 0

Но при n >= 10.000.000 программа ничего не выводит кроме:
Process finished with exit code 11
В чем проблема?
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Code 11 - segmentation fault.
Массив s заводится в стеке, размер стека ограничен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Это же C++, а следовательно, у вас должна быть очень хорошая причина, чтобы не использовать std::vector в данном случае.
Ответ написан
BacCM
@BacCM
C++ почти с рождения
Что делать никто не написал. Хоть и очевидно, вставлю свои 3 копейки.
Можно использовать new[], std::array, или std::vector, ну или перенастроить систему под больший стек
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы