C++中,int类型函数,不写返回值,会默认返回堆栈寄存器中eax的值,可能导致程序出错
Case1:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
int add(int x, int y){
if(x==1) return x+y;
}
int main(){
cout<<add(34,3);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/b176fc48de2d427987e7f61c2ba5befb.png
Case2(UVA-548):
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const int N=1e5+5;
int inorder[N], postorder[N];
int n,minsum, minv;
int lc[N], rc[N]; // 孩子表示法
bool readline(int *a){
n=0;
string line;
if(!getline(cin, line))
return false;
stringstream s(line);
int x;
while(s>>x) a[n++]=x;
return n>0; // 这里没有返回值,导致runtime error;
}
int buildtree(int l1, int l2, int len){
if(len>0){
int t=postorder[l2+len-1];
int chlen=0;
while(inorder[l1+chlen]!=t) chlen++;
lc[t]=buildtree(l1, l2, chlen);
rc[t]=buildtree(l1+chlen+1, l2+chlen, len-chlen-1);
return t;
}
return 0; // 这个不写会tle,因为 如果不返回,会默认返回堆栈中的eax寄存器值导致出错
}
void findmin(int u, int sum){
sum+=u;
if(!lc[u]&&!rc[u]){
if(sum<minsum){
minsum=sum;
minv=u;
}else if(sum==minsum){
minv=min(minv, u);
}
}
if(lc[u]) findmin(lc[u], sum);
if(rc[u]) findmin(rc[u], sum);
}
int main(){
while(readline(inorder)){
readline(postorder);
buildtree(0,0,n);
minsum=INF;
int root=postorder[n-1];
findmin(root,0);
cout<<minv<<endl;
}
return 0;
}