J - 下落的树叶 ( 输入函数要有返回值!)

题目见紫书p161

re,一直re,re到怀疑人生

刚开始出现re的时候怀疑是数组开的不够大

但一直都修改不行

结果是,  , , ,输入函数bool函数没加返回值 return true;

所以re时 ,可能

①除以零 

②数组越界:int a[3]; a[10000000]=10;

③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;(特别是空指针!)

④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

⑤数组(在函数内)开得太大,超出了栈的范围,造成栈溢出:int a[100000000];

再加一项 圈6 非void的函数没有返回值(特别是bool)

#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;

int p[1000];
int lmax=500,rmax=500;
bool sum(int u,int lp){
    int r,l;
    p[lp]+=u;    
    scanf("%d",&l);
    if(l!=-1)sum(l,lp-1);
    scanf("%d",&r);
    if(r!=-1)sum(r,lp+1);
    if(lp<lmax)lmax=lp;
    if(lp>rmax)rmax=lp;
    return true; //<---就是这里!!!要加的
}
int main(){
    int root,j=1;
    memset(p,0,sizeof(p));
    while(j){
    lmax=500;rmax=500;
    scanf("%d",&root);
    if(root==-1)break;
    sum(root,500);
    printf("Case %d:\n",j++);
    for(int i=lmax;i<=rmax;i++)
    if(i==lmax)
    printf("%d",p[i]);
    else printf(" %d",p[i]);
    printf("\n\n");
    memset(p,0,sizeof(p));
    
    }
    
       return 0;
}

猜你喜欢

转载自www.cnblogs.com/-ifrush/p/10202201.html
J