地址消毒器不适用于特定输出
Address sanitizer not working with particular output
我正在解决这个问题https://codeforces.com/problemset/problem/158/A,地址清理器没有出现错误,但是当输入为 n = 1 时,k = 1 地址清理器给出“堆缓冲区溢出”错误。
我的代码
int main(int argc, char const *argv[]) {
int n, k;
cin >> n >> k;
int count = 0;
vector<int> v;
while (n) {
--n;
int a;
cin >> a;
v.push_back(a);
}
int i = 0;
while (i < v.size()) {
if (v[i] >= v[k] && v[i] > 0) {
++count;
}
++i;
}
cout << count << "\n";
return 0;
}
实际上,Address sanitizer 确实 起作用并有助于检测代码中的错误:您正在分配 n
个元素的向量,然后访问 v[k]
。在您的情况下,您正在尝试访问导致缓冲区溢出的 1 大小向量的第二个元素 (v[1]
)。
我正在解决这个问题https://codeforces.com/problemset/problem/158/A,地址清理器没有出现错误,但是当输入为 n = 1 时,k = 1 地址清理器给出“堆缓冲区溢出”错误。
我的代码
int main(int argc, char const *argv[]) {
int n, k;
cin >> n >> k;
int count = 0;
vector<int> v;
while (n) {
--n;
int a;
cin >> a;
v.push_back(a);
}
int i = 0;
while (i < v.size()) {
if (v[i] >= v[k] && v[i] > 0) {
++count;
}
++i;
}
cout << count << "\n";
return 0;
}
实际上,Address sanitizer 确实 起作用并有助于检测代码中的错误:您正在分配 n
个元素的向量,然后访问 v[k]
。在您的情况下,您正在尝试访问导致缓冲区溢出的 1 大小向量的第二个元素 (v[1]
)。