【发布时间】:2018-04-13 00:39:57
【问题描述】:
我正在编写一个简单的程序,将两个向量和 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;
}
}
【问题讨论】:
-
通过使用没有值的变量,您可以立即获得未定义的行为。您应该首先解决这个问题,因为从本质上讲,未定义的行为可能会导致任何事情发生
-
如果您可以访问一个,您应该使用调试器单步执行您的代码。即使没有,您也可以使用一堆
std::cout语句来向您展示代码的去向以及所有内容的价值。 -
您是否尝试过使用调试器单步执行您的程序并查看崩溃发生的位置?
-
将
while (<variable> != 1)更改为while (true)。您已经在循环中检查-1,无需再次检查。 -
@Barmar 或更好:
while (std:cin >> temp && temp != -1).