我已经追溯到一个函数应该返回浮点值介于20和100左右,但有时(10的1次)返回比这更高的值。当我在方法的最后一行的表达,这样存在的问题:在我的C++方法gremlins
return snap(baseNumber, targets) + (octave * NOTES_PER_OCTAVE);
如果我存储在一个变量返回的值,然后再返回变量,问题消失:
float ret = snap(baseNumber, targets) + (octave * NOTES_PER_OCTAVE);
return ret;
下面是完整的方法:
static inline float octaveSnap(float number, std::vector<float>* targets){
static const int NOTES_PER_OCTAVE = 12;
int octave = number/NOTES_PER_OCTAVE;
float baseNumber = number - (octave * NOTES_PER_OCTAVE);
float ret = snap(baseNumber, targets) + (octave * NOTES_PER_OCTAVE);
return ret;
}
和这里的 '捕捉':
// given a single value and a list of values (a scale), return the member of the list which is closest to the single value
static inline float snap(float number, std::vector<float>* targets){
float ret;
float leastDistance = -1;
for(int i = 0; i<targets->size(); i++){
float distance = targets->at(i) - number;
if(distance < 0){
distance = -distance;
}
if(leastDistance == -1){
leastDistance = distance;
}
if(distance < leastDistance){
leastDistance = distance;
ret = targets->at(i);
}
}
return ret;
}
我完全被这个困惑了。任何想法为什么第一个爆炸和第二个完美的作品?
这看起来像我在程序中其他地方的内存损坏(例如缓冲区溢出)。 – 2012-03-01 14:12:44
什么是方法签名? – cha0site 2012-03-01 14:12:54
听起来像它与促销和/或RVO有关...我想你最好的选择是检查生成的程序集。 – 2012-03-01 14:13:07