C语言运行的时候显示已停止运行
答案:4 悬赏:0 手机版
解决时间 2021-03-19 06:53
- 提问者网友:謫仙
- 2021-03-18 23:38
#include
//#define N 1000001
//#define M 10007
int main()
{
int a[1000001];
int i,n;
printf("dfe");
scanf("%d",&n);
a[1]=1;a[2]=1;
for(i=3;i<=n;i++)
a[i]=(a[i-1]+a[i-2])%10007;
printf("%d",a[n]);
return 0;
}
编译的时候会提示已经停止工作。
最佳答案
- 五星知识达人网友:低音帝王
- 2021-03-19 00:35
#include
#include
//#define N 1000001
//#define M 10007
int main()
{
int *a; //因为数组要求连续的空间,可能是系统没有这么大的连续空间
int i,n;
scanf("%d",&n);
a=calloc(n+1,sizeof(int)); //动态分配内存
a[1]=1;a[2]=1;
for(i=3;i<=n;i++)
a[i]=(a[i-1]+a[i-2])%10007;
printf("%d",a[n]);
free(a);
return 0;
}
全部回答
- 1楼网友:十年萤火照君眠
- 2021-03-19 03:00
这种错误一般都是内存越界。
内存越界: 内存分配成功并且已经初始化,但操作越过了内存的边界。
如下:
int a[3]={1, 2, 3};
而在编写时却用到了a[3]/a[4]等。
常见的内存错误 :
内存分配未成功,却使用了它 ;
内存分配虽然成功,但是尚未初始化就引用它 ;
内存分配成功并且已经初始化,但操作越过了内存的边界;
忘记了释放内存,造成内存泄露 ;
释放了内存却继续使用它。
- 2楼网友:舍身薄凉客
- 2021-03-19 02:29
1000001
这尼玛太大
换个小的绝对没问题
数组定义的太大,你想想一个int型是4个字节,即4b,1K=1024b,1M=1024K,你这个数组4000000b,大概3.8M,静态定义的变量在栈区,栈区由编译器分配,一般1M左右,发送溢出了。
你可以改成int * a=new int(1000001);此为动态分配内存,在堆区,堆是和你的计算机内存挂钩的,足够大
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯