永发信息网

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 这尼玛太大 换个小的绝对没问题
  • 3楼网友:怙棘
  • 2021-03-19 01:52
数组定义的太大,你想想一个int型是4个字节,即4b,1K=1024b,1M=1024K,你这个数组4000000b,大概3.8M,静态定义的变量在栈区,栈区由编译器分配,一般1M左右,发送溢出了。 你可以改成int * a=new int(1000001);此为动态分配内存,在堆区,堆是和你的计算机内存挂钩的,足够大
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯