gpt4 book ai didi

c++ - gsl_complex 导致内存溢出

转载 作者:行者123 更新时间:2023-11-30 05:00:35 26 4
gpt4 key购买 nike

我发现 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("%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 声明为 constprintf("%p: ", &realNumber); 返回一个不正确的值,但是 printf("%f\n", realNumber); 返回正确的。

这是错误还是我做了不该做的事?

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

预先感谢您的帮助。

最佳答案

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

关于c++ - gsl_complex 导致内存溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50701248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com