[英]Segmentation fault error C++
我正在编写一个简单的程序,将两个向量交替进行,并将push_backs的向量转换为第三个向量,但是我遇到了分段错误错误(内核已转储)。 我做了一些研究,似乎是我正在访问不存在或不应该访问的内存。 我知道这是一个简单的修复程序,但是我对C ++还是很陌生,因此可以不胜感激。
vector<int> alternate(vector<int> a, vector<int> b)
{
int n = a.size();
int m = b.size();
vector<int> c(n + m);
int i;
for(i = 0; i < a.size() and i < b.size (); i++)
{
c.push_back(a[i]);
c.push_back(b[i]);
}
return c;
}
int main () {
vector<int> a,b,c;
int temp1;
int temp2;
while (temp1 != -1) {
cin >> temp1;
if(temp1 == -1) {
break;
}
a.push_back(temp1);
}
while (temp2 != -1) {
cin >> temp2;
if(temp2 == -1) {
break;
}
b.push_back(temp2);
}
c = alternate(a,b);
int i;
for(i = 0; i < c.size(); i++) {
cout << c[i] << endl;
}
}
据我所知,您在这里有两个问题:
temp1
和temp2
,但没有初始化它们,这是UB。 尝试int temp1 = 0; int temp2 = 0;
int temp1 = 0; int temp2 = 0;
。 alternate
中,您将使用两个输入向量之和初始化返回向量,例如vector<int> c(n + m);
,然后使用push_back
添加这些输入的元素。 这样,您将在返回向量的开始处输入n+m
零,然后在输入元素处输入零。 我很确定您不想要这个。 您不需要为向量设置默认大小,只需使用push_back
如果您坚持使用默认大小,则可以为向量的索引分配值。 您的代码有一些问题,上面提到了一些问题。 最重要的问题如下:
其他较小的问题如下:
毕竟,结果应类似于以下内容:
#include <iostream>
#include <vector>
using namespace std;
vector<int> alternate(const vector<int>& a, const vector<int>& b)
{
const auto n = a.size();
const auto m = b.size();
const auto N = max(n, m);
vector<int> c;
c.reserve(n+m);
for(size_t i = 0; i < N; ++i)
{
if (i < n) c.push_back(a[i]);
if (i < m) c.push_back(b[i]);
}
return c;
}
int main () {
vector<int> a,b,c;
while (true) {
int temp;
cin >> temp;
if(temp == -1) {
break;
}
a.push_back(temp);
}
while (true) {
int temp;
cin >> temp;
if(temp == -1) {
break;
}
b.push_back(temp);
}
c = alternate(a,b);
for (auto val : c) {
cout << val << endl;
}
}
正如两个答案所指出的,未初始化的变量以及使我的“ c”向量太大是罪魁祸首
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.