Неправильный тип данных для free () в Fortran - PullRequest
0 голосов
/ 23 декабря 2018

Меня попросили использовать предоставленную библиотеку здесь , и я следовал инструкциям по ее сборке в Windows, они расположены здесь .

СейчасЯ загрузил Intel Parallel Studio XE по запросу и сделал все как в инструкциях, но внутри кода есть проблема, которую я не могу полностью выяснить, как ее решить.Компилятор говорит Error #6362: The data type(s) of the argument(s) are invalid..

Строки, которые создают проблемы, одинаковы: call free(adr(n))

И объявление adr(n) - это то, чего я не знаю, правильно ли этоили нет, так как я не прикасался к Фортрану 77 некоторое время.Это: adr(n) = malloc(length*ipa), где ipa и length определены правильно, но я не знаю, определено ли adr(n) где-то еще в заголовочных файлах.Должен ли я просто добавить объявление вверху (я слышал, что FORTRAN нужны объявления вверху) или я должен сделать что-то еще?То, что я знаю, это то, что adr(n) должно быть length*ipa байтов, но не в том случае, если это должен быть определенный тип, или нет, и я не помню, как сделать что-то в соответствии с char * adr = (char *) malloc(length*ipa);, как я бы сделал в C.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Об этом спросили и ответили на https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/801638 Используемый источник объявил переменную как целое число * 8 (нестандартное), но 32-битная сборка была выполнена.Поскольку компилятор Intel рассматривает malloc и free как встроенные функции, он обнаружил несоответствие.

0 голосов
/ 28 декабря 2018

В Фортране, когда вы передаете массив подпрограмме, вы не включаете индекс.Передав adr(n), вы только передаете n-ный элемент adr в подпрограмму.Скорее всего, вы хотите передать весь массив следующим образом:

call free(adr)

Если этого не происходит, опубликуйте пример Минимальный, Полный и Проверяемый.

Добро пожаловать в stackoverflow.Я предлагаю вам совершить экскурсию . и научиться задавать хорошие вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...