通过C ++调用Fortran77子例程(传递多维 - 数组) - 错误的Dataoutput

时间:2014-07-23 16:15:44

标签: c++ multidimensional-array fortran pass-by-reference fortran77

我在使用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

这个问题可能是由指针引起的(也许是因为我使用了两个方向?),但我是初学者....所以我不知道该怎么做。这个论坛上的所有类似问题都无法帮助我。

如果有人能帮助我,我会很高兴。

亲切的问候

0 个答案:

没有答案