Вызов подпрограммы Fortran77 из C ++ (передача многомерного массива) — неверный вывод данных

У меня серьезная проблема с вызовом фортрановской подпрограммы (F77) с помощью C ++ Wrapper.
Работает хорошо, но извлеченные данные из массива, в основном генерируемые подпрограммой, немного ошибочны. Если я использую подпрограмму родной F77 Prog, она работает нормально.

Код обёртки:

#include <iostream>

extern"C" void calc_(int *pIDID, double pPROP[2][41], int&, int&, double&, int&, double&, int&, int&);

using namespace std;

int main(){
int cNPRCIS = 2;
int cNUNITS = 2;
int cJOUT = 11111;
int cJIN1 = 7;
int cJIN2 = 3;
double cVALU1 = 35.0;
double cVALU2 = 20.0;
double cPROP[2][41];
cPROP[0][40] = 0.550;
int cIDID;
calc_(&cIDID, cPROP, cJOUT, cJIN1, cVALU1, cJIN2, cVALU2, cNPRCIS, cNUNITS);
for (int i= 1; i < 13; ++i)
{
cout << cPROP[0][i] << " ";
}
return 0;
}

Запуск прог дает мне

269.472 7.71878 20 50 0.840333 0 0 0 0 0 0 0
Segmentation fault

Но это должно быть:

2.6947 7.7188 20 50 0.84033 0 0 9.9741 48.474 -41.988 35.000 -28.514

Адресация строк и столбцов кажется верной?

(Из-за авторских прав мне не разрешается размещать любую подпрограмму, которая является частью базы данных)
Но это те типы переменных, которые используются правильным рабочим нативным Fortranprog.

ДВОЙНАЯ ТОЧНОСТЬ VALU1, VALU2, PROP (0: 41,0: 2)
INTEGER IDID, NUNITS, NPRICS, INP1, INP2, JOUT

Я использовал это как: http://www2.astro.indiana.edu/~jthorn/c2f.html

Эта проблема может быть вызвана указателем (возможно, потому что я использую оба направления?), Но я новичок …. поэтому я не знаю, что делать. Все подобные вопросы на этом форуме не могли помочь мне ни.

Я был бы очень рад, если бы кто-то мог мне помочь с этим.

С уважением

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]