向量下标超出了C ++的循环范围

时间:2020-04-16 08:03:17

标签: c++

运行代码的以下部分时,我继续收到此错误vector subscript out of range,在此行interval.push_back (peaks_position_vector[n+1]-peaks_position_vector[n]);

我认为问题在于胜利者的大小,因为即时通讯超过了向量大小。我试图用100初始化n以测试它并减少n。没有发生错误。有人可以帮助我如何根据我的要求进行修复吗?提前致谢。 (请随意询问代码的其他部分,我只提到了这一部分,因为这仅是发生错误的地方。)

double ECG::compute_heart_rate(vector<double>& peaks_position_vector)
{
    const int s = 60; // 'const' for good practice such that the variable s never changes in execution
    vector<double> interval;
    // compute pair-wise differences
    for (unsigned int n = 0; n < peaks_position_vector.size()-1; n++)
    {
        interval.push_back (peaks_position_vector[n+1]-peaks_position_vector[n]);

        // create heart rate vector
        vector<double> heart_rate;
        for (unsigned int j = 0; j < interval.size()-1; j++)
        {
            double hh = s/interval[j];
            heart_rate.push_back(hh);


            // calculate mean heart rate
            double mean_heart_rate, return_value = 0;
            int x= 0;


            for (unsigned int i=0; i < heart_rate.size(); i++)
            {
                return_value += heart_rate[i];
                x++;

                mean_heart_rate = return_value / x;

            }

        }


    }


} // end of code block

2 个答案:

答案 0 :(得分:0)

我猜是这样

n < peaks_position_vector.size()-1

应该是

n + 1 < peaks_position_vector.size()

假设peaks_position_vector.size()等于零,在peaks_position_vector.size()-1返回无符号值的情况下,您认为size()的计算结果如何?零是可能的最小无符号值?

答案 1 :(得分:0)

您提到的实现存在一个除以零的错误。在执行此操作时,您将向量输入视为{4,4,4,4,5,5,5,5,5}

interval.push_back (peaks_position_vector[n+1]-peaks_position_vector[n]);
....
....
double hh = s/interval[j];
heart_rate.push_back(hh)
...
...
return_value += heart_rate[i];

如您所见,这会使return_value陷入混乱(应具有inf值)。当然,@ john在前面的答案中提到的内容也适用。