【发布时间】:2016-02-26 06:12:58
【问题描述】:
我想知道为什么当我增加数组 a[] 的值时这个程序停止工作 如果有,请告诉我如何在不崩溃的情况下增加这个值 谢谢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i, j, save;
char a[2082001];
memset(a,'1',2082000);
for (i=2;i<=2082000;i++)
{
if (a[i]=='1')
{
save=i;
for (j=i*2;j<=2082000;j+=i)
a[j]='0';
}
}
printf("save = %d",save);
return 0;
}
【问题讨论】:
-
可能是堆栈溢出。尝试在
char a[2082001]之前添加static并查看程序是否崩溃以确定它是否是原因。 -
让我猜猜,你在 Windows 上尝试这个,每个进程只有 1MB 的默认堆栈空间?现在尝试猜测当您尝试在堆栈上创建一个 2MB 数组时会发生什么。
-
“增加价值”是什么意思?你是怎样做的?当前程序运行没有问题...
-
解决堆栈溢出问题后,将
memset(a,'1',2082000);更改为memset(a, '1', 2082001);或者最好是memset(a, '1', sizeof a); -
'停止工作' - 什么?错误消息。请!
标签: c