gpt4 book ai didi

c++ - SIGSEGV 在 C++ 循环中有一个非常大的数组

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:51 26 4
gpt4 key购买 nike

以下使用 sieve 打印一些素数的代码会在在线判断中产生 SIGSEGV 错误。

int main()
{
long count=1;
int arr[100000000];
printf("2\n");
for(long i=3;i<100000000;i=i+2)
{
arr[i]=1;
}
for(long i=3;i<100000000;i=i+2)
{
if(arr[i]==1)
{
count++;
if(count%100==1)printf("%ld\n",i);
for(long j=2;i*j<100000000;j++)
arr[i*j]=0;
}
}
//scanf("%ld",&count);
}

但是如果我删除一些语句:

for(long i=3;i<100000000;i=i+2)
{
if(arr[i]==1)
{
count++;
}
}

如上修改第二个循环。它没有显示错误。关于为什么会发生这种情况以及如何在第一个程序中更正此问题,能否提供一些帮助。

最佳答案

这几乎可以肯定是堆栈溢出,由声明一个巨大的自动数组引起。自动变量通常放在堆栈上,堆栈的最大大小通常为几兆字节。

您可以使用通常分配在堆上的动态数组来修复它:

std::vector<int> arr(100000000);

关于c++ - SIGSEGV 在 C++ 循环中有一个非常大的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647518/

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