Хорошо, проверили все вышеперечисленное, одна проблема заключалась в том, что я не очищал вектор EnergyProbability на каждой итерации цикла while (не то, чтобы он был пустым), это создавало все больший и больший вектор, который перемещался назад из списка каждый раз, поэтому выводились первые два элемента указанного в списке элемента (вектор), и они были одинаковыми каждый раз (очевидно, я дурак). Итак, теперь я знаю, что проблема в том, что итератор не распознает, что он достиг конца списка, и, когда он это делает, он выбрасывает нулевой указатель, я думаю. код здесь:
#include "neutronFileReader.h"
using namespace std ;
neutronFileReader::neutronFileReader()
{
}
list<vector<float> > neutronFileReader::spectrum(char* filename)
{
ifstream fin(filename) ;
string binhi, binlo ;
list<vector<float> > neutronSpectrum ;
list<vector<float> >::iterator nS ;
vector<float> EnergyProbability ;
while(!fin.eof())
{
EnergyProbability.clear() ;
getline(fin, binlo, ' ') ; //get the binlo string
cout << "binlo: "<<binlo << endl ;
getline(fin, binhi, ' ') ; //get the binhi string
cout<<"binhi: "<<binhi<<endl ;
EnergyProbability.push_back(atof(binhi.c_str())+(atof(binhi.c_str()) - atof(binlo.c_str()))/2) ; //store middle of bin as emission Energy
getline(fin, binlo) ; //try not to waste memory space
cout<<"prob: "<<binlo<<endl ;
EnergyProbability.push_back(atof(binlo.c_str())) ; //store emnission probability
cout << EnergyProbability[0] << ":" << EnergyProbability[1] << endl ;
neutronSpectrum.push_back(EnergyProbability) ; //put the vector in the list
}
for(nS = neutronSpectrum.begin() ; nS != neutronSpectrum.end() ; nS++) //go through the neutron spectrum
{
EnergyProbability = (*nS) ;
cout << &neutronSpectrum.begin() << " : " << &nS << " : " << &neutronSpectrum.end() << endl ; // print energy & prob to screen
}
return neutronSpectrum ;
}
вывод:
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
0x28fbcc : 0x28fba8 : 0x28fbc8
тогда code :: blocks должен понимать, что находится в бесконечном цикле, где ничего не меняется, и выходит из кода.
ура, ребята