私はタイトルが私に必要と言うと思う。私はこれを行うために "asd"関数を使うことができると知っていますが、何らかの理由でFortranで割り付けを行う必要があります(つまり、サブルーチン "asd_")。ここではCのコードは次のとおりです。Fortranルーチン内で配列を割り当てる方法 "called" from C
#include <stdio.h>
void asd(float **c) {
*c = (float *) malloc (2*sizeof(float));
**c =123;
*(*c+1)=1234;
}
void asd_(float **c);
main() {
float *c;
asd_(&c);
// asd(&c); would do the job perfectly
printf("%f %f \n",c[0],c[1]);
return 0;
}
そしてここでは、Fortranコードは次のとおりです。
subroutine asd(c)
implicit none
real, pointer, allocatable ::c(:)
print *, associated(c)
if(.not. associated(c)) allocate(c(2))
end subroutine
これは、ランダムにセグメンテーションフォールトを与えます。どんな助けもありがとう。
使用しているオペレーティングシステムは何ですか? – xxbbcc
私はandrewに同意します。私はintrinsic CとFortranの型の間の相互運用性/互換性をサポートするXLコンパイラにISO_C_BINDINGモジュールがあることを知っています。私はgccに似たモジュールがあると信じています。これをチェック - > http://gcc.gnu.org/onlinedocs/gfortran/ISO_005fC_005fBINDING.html –
これはLinuxです。私はifortとiccコンパイラを使用しています。とにかく、MSBソリューションが動作します。ありがとう。 – mem