簡體   English   中英

向量迭代器(分段錯誤)

[英]Vector Iterator (Segmentation fault)

我設計了一個程序來從CSV文件中讀取數據,其中包含來自實時更新的氣象中心的信息。

我現在正在將某些職責划分為多個職能,需要打印指定年份每個月的平均風速和輻射。 輸入的示例:{Year} 2016

樣本輸出:{月,平均風速,平均輻射} 1月,5.5、196.4 2月,4.4、200.3 ...等。

我的程序設置為“ WindData”的向量,其中包含“ Date”,“ Time”和風速數據等不同的類。

以下功能是我遇到的問題:

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,分段故障。

是什么原因造成的? 我已經閱讀了有關延遲迭代器等的內容,但據我所知,它的設置正確。

沒有其他信息,我會做這樣的事情。

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];
}

您的第一個問題在這里:

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

對於i dayCount [i]的最大值,它為零。 我希望您的細分錯誤來自此處。 您應該首先測試要除以的值不為零。

第二個問題是

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

您不必再重復幾個月。 使用迭代器讀取數據時,只需添加到正確的月份即可。 請參閱上面的其他答案(也不測試除以0的結果!!)。 您的代碼變得毫無必要地變得復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM