我正在写一个程序,我必须在4GB RAM机器上制作几个10^6的大整数数组。虽然我选择使用malloc在堆上分配内存。但是在静态定义数组时,我得到明显预期的分段错误当数组初始化如下,但不是当我不初始化这些数组时。本地变量(大数组)的初始化如何影响堆栈大小?
#define LIMIT 1000000
#define MOD 1000000007
using namespace std;
void prime_seive(vector<int> &primes)
{
int i, j;
bool prime_no[LIMIT+1];
int m=sqrt(LIMIT);
// Something else
}
int main()
{
vector<int> primes;
prime_seive(primes);
int t;
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
int a[n+1];
for(int i=1;i<n+1;i++)
{
scanf("%d",&a[i]);
}
int fact_arr[LIMIT+1]={0}; // Segmentation fault when I initialize arrays
int part_arr[LIMIT+1]={0}; // Segmentation fault when I initialize arrays
}
return 0;
}
但是,如果没有初始化
int fact_arr[LIMIT+1]; // NO Segmentation fault here.
int part_arr[LIMIT+1]; // NO Segmentation fault here.
我没有得到任何形式的分段错误的。
所以出于好奇,我想了解什么区别初始化阵列在这里做?
编辑1: 好吧,所以我在最后加上了cout<<fact_arr[0]<<fact_arr[1]<<endl;
,并且打印00为阵列的索引。因此,这似乎是一个危险的手段,不初始化您的阵列
堆栈在RAM中也不是吗? – 101010
是的。你在暗示什么? –
您是否尝试过以某种方式使用数组,例如显示第一项。 –