堆数组分配而不是堆栈
我在C ++中实现了eratosthenes算法的筛选,并且遇到了一个问题。 当我将我的数组初始化为一个非常大的值(例如100万)时,它会因为我将大数组分配给堆栈而中断。 在C中的答案是使用像这个Eratosthenes Siebel一样的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;
}
在堆栈上分配一个大的数组会导致堆栈溢出。 要在堆上分配它,你可以这样做:
int *integerList = new int[1000000];
或者更好的是,使用std::vector
来代替。