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

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])。