gpt4 book ai didi

c++ - 局部变量(大数组)的初始化如何影响堆栈大小?

转载 作者:行者123 更新时间:2023-11-30 01:17:19 25 4
gpt4 key购买 nike

我正在编写一个程序,我必须在 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 。因此,不初始化数组显然是一种危险的手段

最佳答案

当您尝试以您没有权限的方式访问内存时,会导致段错误。如果没有数组初始值设定项,则不会发生访问。*

但是,该代码仍然很陡峭。例如,如果您随后立即调用一个函数,它导致堆栈访问。


* 或者,编译器可能只是选择了优化这些变量。

关于c++ - 局部变量(大数组)的初始化如何影响堆栈大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com