c ++ функция с указателями как проблема аргумента - PullRequest
1 голос
/ 07 апреля 2019

Я использую fftw для преобразования Фурье в С ++. Существует стандартный тип данных fftw_complex, который по сути является двойным [2]. Я хочу сделать массив fftw_complex. Я делаю это с

typedef fftw_complex fftw_complex_16[65536];

Я установил все в ноль в массиве. Тогда у меня есть другая функция, которая должна проверить, если fftw_complex_16 пуст.

bool is_empty_fftw_complex_16(fftw_complex_16 *thecomplex){
    std::cout<<"Test\n"<<::vowels["a:"][0][0]<<std::endl;

    for (unsigned long i=0; i<65536; i++){
         if(thecomplex[i][0] != 0 || thecomplex[i][1] != 0){
            std::cout<<"Huch!"<<i<<std::endl;
            std::cout<<thecomplex[i][0]<<" -- "<<thecomplex[i][1]<<std::endl;
            std::cout<<*thecomplex[i][0]<<" -- "<<*thecomplex[i][1]<<std::endl;

            return 1;
        }
    }
    return 0;
}

Забудьте про койки, они только для отладки. Единственное, что должна сделать функция, это вернуть true, если массив, на который указывает аргумент указателя, пуст и иначе false. Это не работает. Функция говорит, что массив не пустой, когда он есть! Пожалуйста, помогите, что я делаю не так?

1 Ответ

3 голосов
/ 07 апреля 2019

Кажется, проблема в этом

bool is_empty_fftw_complex_16(fftw_complex_16 *thecomplex){

который из вашего описания должен быть действительно

bool is_empty_fftw_complex_16(fftw_complex *thecomplex){

но трудно быть полностью уверенным, потому что вы не опубликовали код, который устанавливает этот массив и вызывает эту функцию, что, к сожалению, крайне важно упустить.

Примерно так будет правильным способом вызова функции

fftw_complex_16 array;
...
is_empty_fftw_complex_16(array);

Я предполагаю, что вы объединили неверное объявление выше с этим неправильным вызовом.

fftw_complex_16 array;
...
is_empty_fftw_complex_16(&array);

Это компилируется, но не делает то, что вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...