gsl_complex导致内存溢出

时间:2018-06-05 13:24:07

标签: c++ windows complex-numbers gsl

我从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)。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

经过进一步调查后,我发现我使用的是旧版GSL。更新到最新的稳定版本后,所描述的行为消失了。