C で初期化された多次元配列を FORTRAN 関数に渡して、配列要素を変更しようとしています。ここで同様の質問を見つけましたが、多次元配列で機能させることができませんでした。アレイに書き込もうとすると、コア ダンプが発生します。私は何が欠けていますか?
コード例:
#include <stdio.h>
#include <stdlib.h>
double f_function(double ****);
double ****alloc_4D_double(int wlen, int xlen, int ylen, int zlen)
{
int i,j,k;
double ****ary = (double****)malloc(wlen*sizeof(double***));
for (i = 0; i < wlen; i++)
{
ary[i] = (double***)malloc(xlen*sizeof(double**));
for (j = 0; j < xlen; j++)
{
ary[i][j] = (double**)malloc(ylen*sizeof(double*));
for (k = 0; k < ylen; k++)
{
ary[i][j][k] = (double*)malloc(zlen*sizeof(double));
}
}
}
return ary;
}
int main ( void ) {
double ****cary = alloc_4D_double(2, 2, 2, 2);
// intialize values
for (j=0; j < 2; j++)
{
for (k=0; k < 2; k++)
{
for (l=0; l < 2; l++)
{
for (m=0; m < 2; m++)
{
cary[j][k][l][m] = 0;
}
}
}
}
f_function (cary);
return 0;
}
と
real(4) function f_function(cary)
use, intrinsic :: iso_c_binding
!DEC$ ATTRIBUTES C :: f_function
implicit none
real(c_double) , intent(out), dimension(2,2,2,2) :: cary
! attempt to overwrite value (core dump!)
cary=1.1_c_double
...
end function f_function