J - 下落的樹葉 ( 輸入函式要有返回值!)
阿新 • • 發佈:2018-12-31
題目見紫書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; }