gsl_complex вызывает переполнение памяти - PullRequest
0 голосов
/ 05 июня 2018

Я вижу странное поведение в функциях комплексных чисел Научной библиотеки 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 как const, printf("%p: ", &realNumber); возвращает неверное значение, но printf("%f\n", realNumber); возвращает правильное.

Это ошибка или я делаю что-то, чего не должно быть?

Я использую компилятор g ++ (версия6.3.0) на компьютере с Windows.

Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 06 июня 2018

После дальнейшего изучения я понял, что использую очень старую версию GSL.Описанное поведение исчезло после обновления до последней стабильной версии.

...