2013-12-18 2 views
2

Я передаю один размерный массив для работы от программы Fortran до C. Функция get вызываемая, но значения, которые она получает, являются мусором. Вот мой кодКак передать массив одного измерения из fortran в c

Файл: abc.f

program test 
    real*4 :: a(4) 
    data a/1,2,3,4/
    call test_func(a) 
end program testFile: 

Файл: abc.c

int test_func(double a[]) { 
    int i; 

    for(i=0;i<4;i++) { 
     printf("%f\n",a[i]); 
    } 

    return 0; 
} 

Но если я передать целое вместо массива, то он успешно прошел.

ответ

1

Вы должны изменить свою подпись

void test_func(float a[], int arraylength); 

Не только вы пропусканием неправильный тип данных, вы также читает больше памяти, то вы прошли в, на долю которого приходится мусор.

real - 4 байта, а double - 8 байт, поэтому вы считываете в два раза больше памяти за пределы вашего массива, когда вы проходили, что приведет к неопределенному поведению.

Еще одной хорошей идеей было бы передать длину массива. Я не знаю, как это происходит в Fortran, но в C вы просто читаете указатель, без какой-либо информации о том, как долго этот массив.