I have a simple method which is searching for exact values in the vectors (data obtained from file) or interpolating the not existing once. I have been running this program many times before and it was working and suddenly it's not. The code:
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];
}
Firstly, valgrind shows:
==4138== Invalid read of size 8
==4138== at 0x4021C8: Integr::F(double, double) (Integr.cpp:81)
and it points to the last line in the above method:
else return f[i];
Can anyone tell me what is wrong?
Aucun commentaire:
Enregistrer un commentaire