我从GNU Science Library复数函数中看到了一些奇怪的行为。该问题在以下代码段中进行了演示:
#include <iostream>
#include <gsl/gsl_complex.h>
#include <gsl/gsl_complex_math.h>
int main() {
double realNumber = 1.0;
gsl_complex complexNumber;
GSL_SET_COMPLEX(&complexNumber, 1.0, 1.0);
printf("%p: ", &realNumber);
printf("%f\n", realNumber);
gsl_complex_add(complexNumber,complexNumber);
printf("%p: ", &realNumber);
printf("%f\n", realNumber);
return 0;
}
输出
0061FF18: 1.000000
0061FF1C: 0.000000
函数gsl_complex_add
将指针的值更改为realNumber
,使其不再指向realNumber
,即使realNumber
似乎没有链接到std::cout
任何方式的功能。我认为这是由于某种溢出造成的。
如果我使用printf
代替realNumber
,则不会出现此问题;我想这是由编译器引起的。
如果我将static
声明为realNumber
,则问题不会发生。
如果我将const
声明为printf("%p: ", &realNumber);
,则printf("%f\n", realNumber);
会返回不正确的值,但@ViewChild
会返回正确的值。
这是一个错误还是我在做一些我不应该做的事情?
我在Windows机器上使用g ++编译器(版本6.3.0)。
提前感谢您的帮助。
答案 0 :(得分:1)
经过进一步调查后,我发现我使用的是旧版GSL。更新到最新的稳定版本后,所描述的行为消失了。