gsl_complex导致内存溢出
gsl_complex causing memory overflow
我看到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
声明为const
,printf("%p: ", &realNumber);
返回一个不正确的值,但printf("%fn", realNumber);
返回正确的值。
这是一个错误还是我在做我不应该做的事情?
我在Windows机器上使用g ++编译器(版本6.3.0(。
提前感谢您的帮助。
经过进一步调查,我意识到我使用的是非常旧版本的GSL。更新到最新的稳定版本后,所描述的行为消失了。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- gsl_complex导致内存溢出
- 哪个内存被溢出
- 缓冲区溢出到其他 exe 的内存中?还是从远程桌面程序到 csrss.exe?
- 读取虚拟内存时C++缓冲区溢出
- 内存块类在溢出后给出一个数字,为什么以及如何
- 内存将被代码中的溢出覆盖
- 如何为大型项目制作一个简单的工具来检测Linux中的双倍空闲或内存溢出
- 内存溢出?
- 内存集内存溢出
- 内存溢出的Dtrace
- SSE-C++内存溢出
- 内存溢出?std:: badalloc
- 如何避免c++中由于内存溢出而导致的错误消息
- 获得由内存泄漏引起的内存溢出,应用程序继续运行和分配
- 在试图确定是在堆栈还是堆上分配内存时,没有发生堆栈溢出
- 溢出或内存错误c++