Я пытаюсь сделать функцию решета для нахождения простых чисел. Сама решетка состоит из массива, размер которого зависит от входного значения функции. Все хорошо для небольших чисел (< ~ 1000000), но большие значения ввода заставляют программу давать ошибку «плохого доступа» при попытке изменить значение элемента 0 массива (помечено в блоке кода).«EXC_BAD_ACCESS» При использовании массива C++
void psieve(uint64_t p)
{
bool flags[p];
flags[0]=false; //This is the line throwing the error (according to xcode)
flags[1]=false;
for (uint64_t i=2; i<p; i++) {
flags[i]=true;
}
for (uint64_t i=0; i<(uint64_t)sqrtl(p); i++) {
if (flags[i]) {
for (uint64_t j=i*i; j<p; j+=i) {
flags[j]=false;
}
}
}
for (uint64_t i=0; i<p; i++) {
if (flags[i]) {
cout<<i<<"\n";
}
}
}
Специфическая ошибка броска является «EXC_BAD_ACCESS (код = 1, адрес = 0x [Это другое шестнадцатеричное число каждый раз, когда])»
Любая помощь будет высоко оценили.
Почему вы не используете что-то вроде 'std :: vector'? Выделение множества вещей в стеке, вероятно, плохой план. – tadman
Не говоря уже о VLA, это не C++-функция. –