关于C++的奇怪bug
  • 板块学术版
  • 楼主岂非
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/13 17:46
  • 上次更新2023/11/4 00:41:56
查看原帖
关于C++的奇怪bug
359845
岂非楼主2021/11/13 17:46

我写了这样一段代码

……
	for(int i=0;i<ve1.size()-2;i++){
		if(ve1[i+1].second==ve1[i+1].first){
			if(a[ve1[i].second]+1<a[ve1[i+2].first]){
				ans=max(ans,ve1[i+2].second-ve1[i].first+1); 
			}
		}
	}
	printf("%lld\n",ans); 
	return 0;
}

(其中省略号代表无关部分)

在运行这段代码时,这个样例出现了RE,在debug时发现RE原因是这个循环被运行了导致ve1的越界,然鹅ve1.size()在运行到这里时为1,并不应该进入该循环

后经过修改这段代码过了

……
	for(int i=0;i<(ve1.size()-2);i++){
		if(i<(ve1.size()-2)){
			break;
		}
		if(ve1[i+1].second==ve1[i+1].first){
			if(a[ve1[i].second]+1<a[ve1[i+2].first]){
				ans=max(ans,ve1[i+2].second-ve1[i].first+1); 
			}
		}
	}
	printf("%lld\n",ans); 
	return 0;
}

请问这是为什么?

省略号部分

2021/11/13 17:46
加载中...