我在使用C ++ Wrapper调用fortran子例程(F77)时遇到了严重问题。 它工作正常,但主要由子程序生成的数组中提取的数据略有错误。如果我使用原生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;
}
运行prog给我
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
行和列的寻址似乎是正确的?
(由于版权问题,我不允许发布任何SUBROUTINE,它是数据库的一部分) 但这些是正确的工作原生Fortranprog使用的变量类型。
DOUBLE PRECISION VALU1,VALU2,PROP(0:41,0:2) INTEGER IDID,NUNITS,NPRICS,INP1,INP2,JOUT
我用这个如何:http://www2.astro.indiana.edu/~jthorn/c2f.html
这个问题可能是由指针引起的(也许是因为我使用了两个方向?),但我是初学者....所以我不知道该怎么做。这个论坛上的所有类似问题都无法帮助我。
如果有人能帮助我,我会很高兴。
亲切的问候