我正在解决这个问题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]
. 在您的情况下,您正在尝试访问v[1]
导致缓冲区溢出的 1 大小向量的第二个元素 ( )。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句