为什么我在此代码中收到运行时错误
why I am getting runtime error in this code
我调试了这个,我发现它的发生是因为最后一个 for 循环v3.size()
,外部循环值v3.size()
是0
,而内部循环值是这样的18076382629293。 为什么?
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> v;
int a, b, c;
map<vector<int>, int> m;
for (int i = 0; i < n; i++) {
cin >> a >> b >> c;
vector<int> v1;
v1.push_back(a);
v1.push_back(b);
v1.push_back(c);
m[v1] = i + 1;
v.push_back(v1);
// cout << 1;
}
sort(v.begin(), v.end());
// int j = i;
vector<vector<int>> v2;
for (int i = 0; i < n; i++) {
if (i == n - 1) {
v2.push_back(v[i]);
continue;
}
if (v[i][0] == v[i + 1][0]) {
if (v[i][1] == v[i + 1][1]) {
cout << m[v[i]] << " " << m[v[i + 1]] << endl;
i++;
continue;
}
}
v2.push_back(v[i]);
}
vector<vector<int>> v3;
for (int i = 0; i < v2.size(); i++) {
if (i == v2.size() - 1) {
v3.push_back(v2[i]);
continue;
}
if (v2[i][0] == v2[i + 1][0]) {
cout << m[v2[i]] << " " << m[v2[i + 1]] << endl;
i++;
continue;
}
v3.push_back(v2[i]);
}
for (int i = 0; i < v3.size() - 1; i += 2) {
cout << m[v3[i]] << " " << m[v3[i + 1]] << endl;
continue;
}
}
测试用例
阿拉伯数字
-32839949 -68986721 41592956
-32839949 -31435211 41592956
当你到达最后一个循环时,v3
为空。v3.size()
是一个无符号值。因此,您使用0-1
作为循环上限,这(在无符号算术中(是一个巨大的值(在 64 位机器上为 264-1(。
简单的解决方法是不检查i < v3.size() - 1
而是检查i + 1 < v3.size()
作为循环绑定。
(编译器确实警告比较有符号和无符号值,但即使i
是无符号的,问题仍然会发生。您只需要小心在小于完整容器大小的循环中的极端情况。
相关文章:
- 为什么此代码存在运行时错误?
- 蝴蝶代码 88.合并排序数组 c++ 运行时错误
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- 为什么我在此代码中收到运行时错误
- 我的代码上的运行时错误 sigsegv
- 矢量的 c++ 代码中的运行时错误
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 我的代码中出现运行时错误的可能原因是什么?
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- .NET CORE 2 DLL引用带有C 代码运行时错误
- 为什么我的代码给出运行时错误超时
- 为什么我的程序在删除以下代码中的注释后会出现运行时错误?
- 薄板样条形状转换运行时错误 [使用代码 -1073741819 退出]
- C 代码的运行时错误(基于指针)
- 代码中的运行时错误,用于求解最小的偶数可整除
- 为什么我的代码导致运行时错误
- 为什么矢量上的这段代码会给出运行时错误
- 涉及向量的初学者代码,SEIGSEV运行时错误
- 为什么这段代码会产生运行时错误