繁体   English   中英

调试断言失败向量下标超出范围

[英]Debug assertion failed vector subscript out of range

当这通过 for 循环时,我不断收到错误消息

“调试断言失败。向量下标超出范围。”

所以我跟踪了 for 循环,当输入是

5
1 100
2 100
3 80
4 60
5 80

当 i == 2 时发生错误。但我不知道 i==2 之后出了什么问题。 请给我一些建议。

错误在这一部分:

for (int i = 0; i < childNum; i++) {
        if (!IncrementIfFound(value_counts, info.gram_v[i])) {
            Number_Counts temp(info.gram_v[i]);
            value_counts.push_back(temp);
            cout << "Value counts: " << value_counts[i].value << "\t" << value_counts[i].count << endl;
        }
    }

这是我的代码:

struct Number_Counts
{
    int value;
    int count;
    Number_Counts( int _element) { value = _element; count = 1; }
};

struct ChildInfo
{
    vector<int> id_v;
    vector<int> gram_v;
};

bool IncrementIfFound(vector<Number_Counts> &, int );

bool IncrementIfFound(vector<Number_Counts> &_Container, int _element)
{
    for (int i = 0; i < _Container.size(); i++) {
        if (_Container[i].value == _element) {
            _Container[i].count++;
            cout << "i : " << i <<" Container value: " << _Container[i].value << " counter: " << _Container[i].count 
                << " size: " << _Container.size() << endl;
            return true;
        }
    }
    return false;
}

int main() {
    vector<Number_Counts> value_counts;
    ChildInfo info;
    int childNum,id, gram = 0;

    cin >> childNum;
    for (int i = 0; i < childNum; i++) {
        cin >> id >> gram;
        info.id_v.push_back(id);
        info.gram_v.push_back(gram);
    }

    for (int i = 0; i < childNum; i++) {
        if (!IncrementIfFound(value_counts, info.gram_v[i])) {
            Number_Counts temp(info.gram_v[i]);
            value_counts.push_back(temp);
            cout << "Value counts: " << value_counts[i].value << "\t" << value_counts[i].count << endl;
        }
    }

    return 0;
}
for (int i = 0; i < childNum; i++) {
    if (!IncrementIfFound(value_counts, info.gram_v[i])) {
        Number_Counts temp(info.gram_v[i]);
        value_counts.push_back(temp);
        cout << "Value counts: " << value_counts[i].value << "\t" << value_counts[i].count << endl;
    }
}

想象一下,如果您的if跳过前n次迭代。 比当您访问value_counts[i].value ,您将访问超出数组边界,因为新值未添加到向量中。

        auto&& number_count = value_counts.back();
        cout << "Value counts: " << number_count.value << "\t" << number_count.count << endl;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM