矢量迭代器(分段故障)
Vector Iterator (Segmentation fault)
我设计了一个程序,从CSV文件中读取数据,该文件包含实时更新气象中心的信息。
我现在正在将某些职责划分为多个功能,我需要打印平均风速&特定年份每个月的辐射。样本输入:{年份}2016年
样本输出:{月、平均风速、平均辐射}196.4年1月5日200.3年2月4日。。。等
我的程序被设置为"WindData"的向量,它包含不同的类,如"Date"、"Time"answers"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天的大多数值,Count[i]为零。我想你的分段错误来自这里。您应该首先测试要除以的值是否为零。
第二个问题是
for(int i = 0; i < 12; i++)
你不必再重复几个月。您只需要在使用迭代器读取数据时添加到正确的月份。请参阅上面的另一个答案(也不测试0的除法!!)。您的代码变得异常复杂。
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 对程序故障进行分段
- 分段故障说明
- 分段故障(核心转储)-不知道为什么
- 分段故障线程
- hiredis SET遇到分段故障
- 分段故障,合并排序算法
- 多线程程序中的分段故障和gdb回溯上的不完整信息
- 到达主C++之前分段故障
- 分段故障核心使用 IF流转储
- 使用向量的移动键盘排列(分段故障)
- 在二进制树插入和遍历期间,我得到了分段故障
- 分段故障在类之间返回整数