[英]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.