gsl_complex导致内存溢出

gsl_complex causing memory overflow

本文关键字:内存 溢出 complex gsl      更新时间:2023-10-16

我看到GNU科学图书馆复数函数的一些奇怪行为。以下代码片段演示了此问题:

#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("%fn", realNumber);
gsl_complex_add(complexNumber,complexNumber);
printf("%p: ", &realNumber);
printf("%fn", realNumber);
return 0;
}

输出为

0061FF18: 1.000000
0061FF1C: 0.000000

该函数gsl_complex_add将指针的值更改为realNumber,使其不再指向realNumber,即使realNumber似乎没有以任何方式链接到该函数。我认为这是由于某种溢出。

如果我使用std::cout而不是printf,则不会出现此问题;我想这是由于编译器。

如果我将realNumber声明为static则不会出现问题。

如果我将realNumber声明为constprintf("%p: ", &realNumber);返回一个不正确的值,但printf("%fn", realNumber);返回正确的值。

这是一个错误还是我在做我不应该做的事情?

我在Windows机器上使用g ++编译器(版本6.3.0(。

提前感谢您的帮助。

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