Valgrind показывает «Недопустимое чтение размера 8» во время чтения файла

У меня есть простой метод, который ищет точные значения в векторах (данные, полученные из файла) или интерполирует несуществующие однажды Я запускал эту программу много раз, и она работала, и вдруг это не так.
Код:

double  Integr::F(double x_val, double q2_val){

int i=0;
bool interpolate_x=0, interpolate_q=0;

vector<double>::iterator it = begin(x_f);
for(; it != end(x_f) ; it += 201){

if(*it == x_val){
interpolate_x = 0;
break;
}
else if(*it > x_val){
interpolate_x = 1;
break;
}
i += 201;
}

it = begin(q2)+i;
for(; it != end(q2) ; ++it){

if(*it == q2_val){
interpolate_q = 0;
break;
}
else if(*it > q2_val){
interpolate_q = 1;
break;
}
++i;
}
double f1, f2;
if(interpolate_x){

f1 = Interpolate::interpolate(f[i], f[i-201], x_f[i], x_f[i-201], x_val);
f2 = Interpolate::interpolate(f[i-1], f[i-202], x_f[i-1], x_f[i-202], x_val);
if(!interpolate_q) return f1;
else{
return Interpolate::interpolate(f1, f2, q2[i], q2[i-1], q2_val);
}
}
if(interpolate_q){

return Interpolate::interpolate(f[i], f[i-1], q2[i], q2[i-1], q2_val);
}
else return f[i];
}

Во-первых, Вальгринд показывает:

==4138== Invalid read of size 8
==4138== at 0x4021C8: Integr::F(double, double) (Integr.cpp:81)

и это указывает на последнюю строку в вышеупомянутом методе:

else return f[i];

Может кто-нибудь сказать мне, что не так?

[РЕДАКТИРОВАТЬ] Метод чтения из файла:

void Data::read_File() {

if(file.good() == true){

double tmp1, tmp2, tmp3;
int i=0;
while(!file.eof()) {
++i;
file >> tmp1;
file >> tmp2;
file >> tmp3;
x.push_back(tmp1);
q.push_back(tmp2);
f.push_back(tmp3);
cout << i << endl;
}
file.close();

} else cout << "Access denied! \n";
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]