C++中非void类型函数,不写返回值时,可能出现的错误

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值