矢量迭代器(分段故障)

时间:2016-05-27 07:30:35

标签: c++ vector iterator

我设计了一个程序,用于从包含实时更新气象中心信息的CSV文件中读取数据。

我现在正在将某些职责分解为功能,我需要打印平均风速和功能。指定年份每个月的辐射。 样本输入: {年} 2016

示例输出: {月,平均风速,平均辐射} 1月,5.5,196.4 二月,4.4,200.3 ... 等

我的程序被设置为“WindData”的向量,其包含不同的类,例如“日期”,“时间”和“时间”。风速数据。

以下功能是我遇到的问题:

void averageWind(int yearNum, std::vector<WindData>& windlog)
{
    std::string month[12] = {"January", "February", "March", "April", "May", "June",
                            "July", "September", "October", "November", "December"};
    int monthCount = 0, monthNum[12] = {0}, monthAverage[12] = {0};
    int dayCount[12] = {0}, totalWindSpeed[12] = {0}, totalRadiation[12] = {0}, mWindAverage[12] = {0};

    std::vector<WindData>::iterator iter;
    for(iter = windlog.begin(); iter != windlog.end(); iter++)
    {
        if(iter->getYear() == yearNum)
        {
            for(int i = 0;  i < 12; i++)
            {
                while((iter->getMonth()-1) == i)
                {
                    dayCount[i]++;
                    totalWindSpeed[i] += iter->getSpeed();
                }
                std::cout << "Wind Speed: " << totalWindSpeed[i] << std::endl;
                std::cout << "Day Count: " << dayCount[i] << std::endl;
                mWindAverage[i] = (totalWindSpeed[i] / dayCount[i]);

                //std::cout << mWindAverage[i];
                //std::cout << month[i];
            }

        }


    }


}

这显然不完整,打印方法仅用于测试目的,我的问题是totalWindSpeed和dayCount都产生0。 我试图调试代码以确定它出错的地方,似乎迭代器本身存在问题,但是当我在我的主函数中使用它时,这种方法有效。

错误如下:

  

编程接收信号SIGSEGV,分段故障。

可能导致这种情况的原因是什么?我已经阅读了关于引用迭代器等的内容,但是从我可以告诉它的设置是正确的。

2 个答案:

答案 0 :(得分:1)

如果没有其他信息,我会做这样的事情。

for (WindData& windData : windlog) {
    if (windData.getYear() == yearNum) {
        int i = windData.getMonth() - 1;
        totalWindSpeed[i] += windData.getSpeed();
        dayCount[i]++;
    }
}

for (int i = 0; i < 12; i++) {
    // If each month appears only once, this may go into the previous loop.
    mWindAverate[i] = totalWindSpeed[i] / dayCount[i];
}

答案 1 :(得分:1)

你的第一个问题是:

mWindAverage[i] = (totalWindSpeed[i] / dayCount[i]);

对于i dayCount [i]的大多数值为零。我希望你的分段错误来自这里。你应该首先测试除以的值不是零。

第二个问题是这个

for(int i = 0;  i < 12; i++)

您不必再重复几个月。使用迭代器读取数据时,只需添加到正确的月份。请参阅上面的其他答案(不测试0除以!!)。你的代码变得无聊复杂。