Итак, мне было поручено перевести некоторые фортрановые подпрограммы в C. Эти подпрограммы вызываются как часть потока управления большой программы, основанной в основном на C.
Я перевожу функции одинв то же время, начиная с функций, которые находятся наверху стеков вызовов.
Проблема, с которой я сталкиваюсь, заключается в передаче данных массива из C в fortran.
Предположим, мыобъявили массив в c как
int* someCArray = (int*)malloc( 50 * 4 * sizeof(int) );
Теперь этот массив должен быть передан в подпрограмму fortran для заполнения данными
someFortranFunc( someCArray, someOtherParams );
, когда массив прибывает в землю fortran, она объявляется как матрица переменного размера как таковая:
subroutine somefortranfunc(somecarray,someotherparams)
integer somefarray(50,*)
Проблема в том, что фортран, похоже, неправильно определяет размер массива из-за ошибок программы.Когда я отлаживаю программу, я обнаруживаю, что индексирование
somefarray(1,2)
сообщает, что это недопустимый индекс.Любые ссылки на любые элементы в первом столбце работают нормально, но в массиве есть только один доступный столбец, когда он прибывает в Фортран.
Я не могу изменить тот факт, что это массив переменного размера вФортран.Может кто-нибудь объяснить, что здесь происходит, и есть ли способ, которым я могу смягчить проблему со стороны C вещей?
[править]
Кстати, подпрограмма fortran в настоящее времявызывается из замененного кода Фортрана как
integer somedatastorage(plentybignumber)
integer someindex
...
call somefarray(somedatastorage(someindex))
, где хранилище данных представляет собой большой 1d массив.Нет проблем с превышением размера хранилища данных.Тем не менее, каким-то образом разница между передачей массива C и массива fortran (под) вызывает разницу в подпрограмме fortran.
Спасибо!