Я конвертирую программу из fortran77 в язык программирования C. В программе fortran объявляется массив 5D, как показано ниже, и код компилируется и работает хорошо. Но когда я конвертирую тот же код в C с теми же значениями, код C компилируется, но это вызывает ошибку сегментации.
Если эта проблема вызвана различной стандартной компоновкой распределения памяти многомерных массивов между двумя языками, я попробовал все комбинации измерений при объявлении массива в C, и во всех случаях он также дает «Ошибка сегментации».
Я также устал от метода calloc, показанного ниже, и он работает, но я не знаю, как назначить значения глобально объявленному массиву.
Примечание. Ошибка сегментации находится на этапе объявления (т. Е. На этом программа останавливается)
Итак, в основном мои вопросы:
- Почему это работает в Фортране, но не в С?, И,
- Как решить эту проблему в C?
! Fortran77 Code
parameter (i2maxbin=38)
parameter (imaxbin=20)
parameter (Nid=10)
real*8 dNdpt(Nid,i2maxbin,imaxbin,imaxbin,imaxbin)
/* C Code */
const int i2maxbin = 38;
const int imaxbin = 20;
const int nID = 10;
double dNdpt[nID][i2maxbin][imaxbin][imaxbin][imaxbin];
/* Declaring using calloc */
double (*dNdpt)[nID][i2maxbin][imaxbin][imaxbin][imaxbin] =
calloc(sizeof(*dNdpt), 38);
for(int i = 0; i < nID; i++)
{
for(int j = 0; j < i2maxbin; j++)
{
dNdpt[i][j][0][0][0] = 12.22673423;
}
}
When executing it gives me this error
error: assignment to expression with array type
dNdpt[i][j][0][0][0] = 12.22673423;
^