我正在用C ++实现eratosthenes算法的筛子,我遇到了一个问题。当我将我的数组初始化为一个非常大的值,如100万时,它会中断,因为我正在为堆栈分配太大的数组。 C中的答案是使用像这样Sieve of Eratosthenes的malloc,但是这个解决方案在C ++中不起作用(据我所知)。关于如何通过在堆中而不是堆栈中分配数组来使这个程序能够处理非常大的数字的任何想法?感谢。
要查看我遇到的问题,请将以下代码更改为int integerList [1000],将1000更改为1000000或更高。
int main(void)
{
int userInput = 0;
int integerList[1000] = {};
cout << "Please pick a number to find all prime numbers "
<< "from 2 to that number: " << endl;
//for the sake of writing out algorithm only, assume correct input
cin >> userInput;
//initialize array
for (int i = 2; i <= userInput; i++)
{
integerList[i] = i;
}
//implementation of the algorithm
for (int i = 2; i < userInput; i++)
{
if (integerList[i] != 0)
{
for (int j = 2; j < userInput; j++)
{
integerList[j*integerList[i]] = 0;
if (integerList[i] * j > userInput)
{
break;
}
}
}
}
for (int i = 0; i < userInput; i++)
{
if (integerList[i] != 0)
{
cout << integerList[i] << " ";
}
}
system("Pause");
return 0;
}
答案 0 :(得分:1)
在堆栈上分配大的数组会导致stack overflow。要在堆上分配它,您可以执行以下操作:
int *integerList = new int[1000000];
或者更好的是,改为使用std::vector
。