c++ - 为什么这个 RE(SIGSEGV) 错误在提交时出现在 C++ 中?
问题描述
在提交代码时,我收到了 RE(SIGSEGV) 错误。我的代码是:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T,val,v;
int min = INT_MAX;
int N,M;
cin >> T;
while(T--){
cin >> N >> M;
vector<int> vec(M+1,0);
vector<int> arr1;
for(int i=0;i<N;i++){
cin >> v;
arr1.push_back(v);
}
for(int j=0;j<N;j++){
cin >> val;
vec[arr1[j]]+=val;
}
for(int i=1;i<=M;i++){
if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
min = vec[arr1[i]];
}
}
cout << " box: "<<endl;
for(int a=0;a<vec.size();a++){
cout << vec[a] << " ";
}
cout << endl;
cout << min << endl;
vec.clear();
arr1.clear();
}
return 0;
}
问题链接:https ://www.codechef.com/MARCH20B/problems/CHPINTU 。谁能告诉我为什么会这样?我该如何克服这个问题? 谢谢你。
解决方案
N 可能小于 M,在这种情况下,这可能会导致分段错误:
for(int i=1;i<=M;i++){
if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
min = vec[arr1[i]];
}
}
您应该查看vec[i]而不是vec[arr1[i]]
Nit:这仍然会给你 WA(Wrong Answer) 但不会导致 SIGSEGV,我能找到的错误之一只是在开始时初始化min,而不是在循环中用 INT_MAX 初始化它T
推荐阅读
- java - 如何验证已取消的应用内订阅?
- angular - Angular 应用程序的 nginx 配置-子域映射现在可以工作
- java - 我有一个 JSON 响应,但我一直在使用它
- functional-programming - 为什么我的搜索功能总是输出真?
- javascript - 在两个选择选项之间共享值并使用相同的函数来更改值
- html - ul li 圆形设计与文字
- java - 如何从 JSONObject 获取 JSON 字符串?
- maven - 为什么我的 maven 没有收到我的 maven 个人资料?
- c - 为什么#define 和 maro 名称之间没有空格?
- java - 在 java 中使用 DBCC CHECKDB