程序已停止工作?如何使 int 数组大小超过 1,000,000?
program has stopped working?How to have int array size exceeding 1,000,000?
作业:写一个关于埃拉托色尼筛的c++程序,打印出1到1,000,000之间的所有质数。
我已经意识到,当我有一个非常大的数字(例如 1,000,000)时,程序会停止工作,而对于较小的数字(例如 9,000),该程序可以正常工作。有没有办法将 1,000,000 作为整数数组大小?
#include <iostream>
using namespace std;
void sieve(int [], int num);
int main()
{
int numOfElements;
cout<<"please input number"<<endl;
cin>>numOfElements;
int primeArray[numOfElements];
sieve(primeArray, numOfElements);
return 0;
}
//prime number: any whole number greater than one and has factors of only the number itself and one.
void sieve(int prime[], int num){
int i,j;
for(int a=0;a<num;a++){
prime[a]=a+1;
}
prime[0]=0;//we know 1 is not a prime;
for(i=2;i<=num;i++){
if(prime[i-1]!=0){
cout<<i<<endl;
}
for(j=i*i;j<=num;j+=i){
prime[j-1]=0;
}
}
}
int primeArray[numOfElements];
这是错误的!
数组维度必须在编译时已知。
它们必须是编译时常量。
改用 std::vector<int>
。
能够编写 int primeArray[numOfElements];
(这称为可变长度数组)是 编译器扩展:不是标准 C++ 的一部分。我希望你的编译器警告你这一点;如果不是,请确保警告级别设置正确。
但在这种情况下这是一个有争议的问题:尝试在堆栈上分配如此大的数组将会失败。堆栈大小限制为兆字节的数量级。
最好的补救方法是使用 std::vector
,它 (i) 是标准 C++,并且 (ii) 将在 heap.[=14 上分配内存=]
如果你必须使用数组,那么你可以使用int* primeArray = new int[numOfElements]
。不要忘记使用 delete[]
释放内存,注意括号。
作业:写一个关于埃拉托色尼筛的c++程序,打印出1到1,000,000之间的所有质数。 我已经意识到,当我有一个非常大的数字(例如 1,000,000)时,程序会停止工作,而对于较小的数字(例如 9,000),该程序可以正常工作。有没有办法将 1,000,000 作为整数数组大小?
#include <iostream>
using namespace std;
void sieve(int [], int num);
int main()
{
int numOfElements;
cout<<"please input number"<<endl;
cin>>numOfElements;
int primeArray[numOfElements];
sieve(primeArray, numOfElements);
return 0;
}
//prime number: any whole number greater than one and has factors of only the number itself and one.
void sieve(int prime[], int num){
int i,j;
for(int a=0;a<num;a++){
prime[a]=a+1;
}
prime[0]=0;//we know 1 is not a prime;
for(i=2;i<=num;i++){
if(prime[i-1]!=0){
cout<<i<<endl;
}
for(j=i*i;j<=num;j+=i){
prime[j-1]=0;
}
}
}
int primeArray[numOfElements];
这是错误的!
数组维度必须在编译时已知。
它们必须是编译时常量。
改用 std::vector<int>
。
能够编写 int primeArray[numOfElements];
(这称为可变长度数组)是 编译器扩展:不是标准 C++ 的一部分。我希望你的编译器警告你这一点;如果不是,请确保警告级别设置正确。
但在这种情况下这是一个有争议的问题:尝试在堆栈上分配如此大的数组将会失败。堆栈大小限制为兆字节的数量级。
最好的补救方法是使用 std::vector
,它 (i) 是标准 C++,并且 (ii) 将在 heap.[=14 上分配内存=]
如果你必须使用数组,那么你可以使用int* primeArray = new int[numOfElements]
。不要忘记使用 delete[]
释放内存,注意括号。