首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么爆内存,该如何解决

2012-05-06 
为什么爆内存下面的代码帮忙看下,不用管是什么用的,我认为爆栈可以理解成数组开大了或小了,或这运行过程中

为什么爆内存
下面的代码帮忙看下,不用管是什么用的,我认为爆栈可以理解成数组开大了或小了,或这运行过程中占用了太多数组
最少也能把数据输入吧,但是我调试下面的程序,刚刚debug输入,他就提示segmentation fault,测试数据1995 1 1
大家直接调试吧 就能看出问题吧 谢谢大家了

[code=C/C++][/code]#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int nleap[13]= {31,28,31,30,31,30,31,31,30,31,30,31};
int leap[13]= {31,29,31,30,31,30,31,31,30,31,30,31};
int SG[38000];

int Is_leap(int a)
{
  if((a%4==0 && a%100!=0) || a%400==0) return 1;
  return 0;
}

int count(int year,int month,int day)
{
  int sum=0,i,j;
  for (i=year; i<=2001; i++)
  {
  if(i==year) j=month;
  else j=1;
  if(Is_leap(i))
  {
  for (;j<=12; j++)
  {
  sum+=leap[j-1];
  }
  sum-=day;
  }
  else
  {
  for (;j<=12; j++)
  {
  sum+=nleap[j-1];
  }
  sum-=day;
  }
  }
  sum-=57;
  return sum;
}

int get_SG(int a,int year,int month,int day)
{
  int temp,i;
  int judge[1000]= {0};
  int m,y,d;
  m=month; y=year; d=day;
  for (i=0; i<2; i++)
  {
  if(i==0)//明天
  {
  temp=a-1;
  if(temp<0) break;
  if(Is_leap(year))
  {
  if(month==12 && leap[11]==day)
  {
  year+=1;
  month=1;
  day=1;
  }
  else if(month!=12 && leap[month-1]==day)
  {
  month+=1;
  day=1;
  }
  else day+=1;
  }
  else
  {
  if(month==12 && nleap[11]==day)
  {
  year+=1;
  month=1;
  day=1;
  }
  else if(month!=12 && nleap[month-1]==day)
  {
  month+=1;
  day=1;
  }
  else day+=1;
  }
  }
  else//下个月同一天
  {
  if(Is_leap(year))
  {
  if(day>leap[month%12])//只能明天
  {
  temp=a-1;
  if(temp<0) break;
  if(month==12 && leap[11]==day)
  {
  year+=1;
  month=1;
  day=1;
  }
  else if(month!=12 && leap[month-1]==day)
  {
  month+=1;
  day=1;
  }
  }
  else
  {
  temp=a-nleap[month-1];//跳到下一个月
  if(temp<0) break;
  if(month==12) year+=1;
  month+=1; if(month==13) month=1;
  }

  }
  else


  {
  if(day>nleap[month%12])
  {
  temp=a-1;
  if(temp<0) break;
  if(month==12 && nleap[11]==day)
  {
  year+=1;
  month=1;
  day=1;
  }
  else if(month!=12 && nleap[month-1]==day)
  {
  month+=1;
  day=1;
  }
  }
  else
  {
  temp=a-nleap[month-1];
  if(temp<0) break;
  if(month==12) year+=1;
  month+=1; if(month==13) month=1;
  }

  }
  }
  if(SG[temp]==-1) SG[temp]=get_SG(temp,year,month,day);
  judge[SG[temp]]=1;
  year=y; day=d; month=m;
  }
  for (i=0;;i++)
  if(judge[i]==0) return i;
}

int main()
{
  int T;
  int month,year,day,ans;
  memset(SG,-1,sizeof(SG));
  scanf("%d",&T);
  while(T--)
  {
  int sum=0;
  scanf("%d%d%d",&year,&month,&day);
  sum=count(year,month,day);
  ans=get_SG(sum,year,month,day);
  if(ans) printf("YES\n");
  else printf("NO\n");
  }
  return 0;
}




[解决办法]
断点后单步调试一下吧......

这样看着累啊~
[解决办法]
for (i=0;;i++)
if(judge[i]==0) return i;

这是什么意思??
没条件?

栈出错了,可能是递归太深了. 用个变量控制下递归的深度试试
[解决办法]

探讨

for (i=0;;i++)
if(judge[i]==0) return i;

这是什么意思??
没条件?

栈出错了,可能是递归太深了. 用个变量控制下递归的深度试试

热点排行