擦除矢量时出现分割错误
Segmentation fault while erasing vector
while(!v1.empty() || !v2.empty())
{
int k=0;
if(v1[k] < v2[k])
v1.erase(v1.begin());
else
v2.erase(v2.begin());
cout<<v1[0];
}
这是我的代码在这里我想删除元素,直到其中一个为空(向量被排序(,比如如果
v1 包含 2,3,5,8
v2 包含 3,4,7
那么根据我的说法,它应该给我8
但它的给予segmentation fault
使用 &
& 代替 ||:
while( !v1.empty() && !v2.empty())
否则,当其中一个向量为空时,您将进入 while 循环,随后尝试访问不存在的元素。
while(!v1.empty() && !v2.empty())
{
int k=0;
if(v1[k] < v2[k])
v1.erase(v1.begin());
else
v2.erase(v2.begin());
}
if (!v1.empty()) {
cout << v1[0];
} else if (!v2.empty()) {
cout << v2[0];
}
使用 &&
:
while( !v1.empty() && !v2.empty())
{
...
}
第二个秋天是你在erase
之后使用v1[0]
。如果erase
删除向量v1
的最后一个元素,则v1[0]
会导致未定义的行为。
if(v1[0] < v2[0])
v1.erase(v1.begin());
else
v2.erase(v2.begin());
cout << v1[0];
以下条件:
if(v1[k] < v2[k])
此条件不会检查vector
是否已为空。如果其中一个vector
被清空,那么您正在访问禁止的位置(v1[0]
或v2[0]
(。所以你的条件应该是这样的:
while(!(v1.empty() || v2.empty()))
相关文章:
- C++映射分割错误(核心转储)
- 由cin中的字符串中未捕获空白引起的分割错误
- 删除映射和分割错误中的一个过去结束元素
- 在指向函数中读取变量时出现分割错误
- 在链表中的第 n 位插入显示分割错误
- 较高值 n 的分割错误(例如 n=999997)
- 尝试通过memcpy复制大尺寸浮点向量时的分割错误
- 分割错误:向量中的擦除功能
- 向量向量的分割错误
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 分割错误 11:尝试使用 cin 输入 B[1] 时
- 集合布局上的 Qt 分割错误
- 高达20亿的筛子会产生分割错误
- 对向量使用推回函数时的分割错误
- 绘制精灵会导致分割错误
- 将矢量的整数内容打印为字符串会导致分割错误
- 分割错误:使用向量时为 11 c++
- 结构的分割错误错误