首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >gsl_complex导致内存溢出

gsl_complex导致内存溢出
EN

Stack Overflow用户
提问于 2018-06-05 21:24:07
回答 1查看 65关注 0票数 1

我在GNU Science Library复数函数中看到了一些奇怪的行为。以下代码片段演示了该问题:

代码语言:javascript
复制
#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;
}

输出为

代码语言:javascript
复制
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);将返回正确的值。

这是一个bug,还是我做了一些不应该做的事情?

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

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 04:27:45

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50701248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档