C++ 获取以下cpp代码中的SIGESV错误
以下cpp代码中出现SIGESV错误,请检查C++ 获取以下cpp代码中的SIGESV错误,c++,vector,C++,Vector,以下cpp代码中出现SIGESV错误,请检查 #包括 使用名称空间std; int main(){ int t; cin>>t; 而(t--){ int n,m; int sa=0,sb=0,c=0; cin>>n>>m; 载体a; 对于(int i=0;i>a[i]; } 载体b; for(int i=0;i>b[i]; } int k=最小值(n,m); 而(k--){ sa=累计(a.开始(),a.结束(),0); sb=累计(b.开始(),b.结束(),0); 如果(sb>=sa){ 交
#包括
使用名称空间std;
int main(){
int t;
cin>>t;
而(t--){
int n,m;
int sa=0,sb=0,c=0;
cin>>n>>m;
载体a;
对于(int i=0;i>a[i];
}
载体b;
for(int i=0;i>b[i];
}
int k=最小值(n,m);
而(k--){
sa=累计(a.开始(),a.结束(),0);
sb=累计(b.开始(),b.结束(),0);
如果(sb>=sa){
交换(*最小元素(a.begin(),a.end()),
*最大元素(b.开始(),b.结束());
C++;
}否则{
打破
}
}
如果(sb>=sa){
cout载体a的大小和容量为0,且永不改变
此代码已被破坏:
向量a;
对于(int i=0;i>a[i];
}
运算符[]()
不会增长向量。您正在将值分配给不属于a
的内存
你至少需要a.向后推(i)
。你可能真正需要的是:
向量a;
a、 储备(n);
对于(int i=0;i>tmp;
a、 推回(tmp);
}
保留内存会阻止向量重新分配。在构造函数中不这样做也会停止所有元素的默认初始化
b
向量也是如此
您也永远不会更改sa
或sb
的值,但这不会使任何内容崩溃,我所看到的只是一个逻辑错误
整个文件中也充斥着不好的做法。“竞争性”编码网站会让你成为一个更糟糕的程序员。当你在做cin>>a[i]
时,a
仍然是空的,因此试图访问它的第i个元素会产生一个segfault。请先用a.Resize(n)调整它的大小
或使用适当的大小初始化它:向量a(n);
当您在声明向量时知道需要的大小时,您应该这样声明向量
vector<int>arr(n);
vector<int>arr2(m);
vectorr(n);
矢量阵列2(m);
这将创建一个大小为n的向量,初始化时该向量中所有索引的值都为零
不要使用和尝试为变量命名,它对我们和你都是非常有用的。我知道这是一个复杂的编程问题,但仍然。在第一个bug之后停止阅读。使用<代码> PuxSuffue/Cuff>将一个新的值追加到向量的末尾。也不要包括,它不是C++的一部分,而是一个头。附带一个编译器。cin>>a[i];
-->cin>>a.at(i);
--然后您将看到问题所在,而不是得到SIGSEGV。