地址消毒剂不适用于特定输出

拉胡尔·库马尔

我正在解决这个问题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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章