У меня возникла проблема с передачей массивов между модулями и основной программой. Модуль и основная программа прекрасно компилируются с использованием gfortran. Однако при выполнении файлов .exe файл сталкивается с проблемой и закрывается. Это происходит только тогда, когда массив имеет неизвестный размер (и его размер должен быть выделен). Я включил небольшой фрагмент кода, который иллюстрирует эту проблему:Fortran 95 - Передача массивов между модулями
Как это работает: Пользователю предлагается целое число «я», который определяет размер квадратной матрицы. Это целое число передается функции модуля, которая создает матрицу и возвращает ее в основную программу. Затем матрицу печатают на экране.
Основная программа в одном файле:
program main1
use module1
implicit none
integer :: i
real,allocatable :: a(:,:)
write(*,*)'Input the size of the square matrix'
read(*,*)i
allocate(a(i,i))
a = function1(i)
write(*,*) 'The square matrix a='
write(*,*) a
deallocate(a)
end program main1
и модуль в отдельном файле:
module module1
contains
function function1(i)
real, allocatable,dimension(:,:) :: function1
integer :: i
allocate(function1(i,i))
function1 = 1.0
deallocate(function1)
end function function1
end module
Спасибо за вашу помощь, ребята!
Я не понимаю вашего последнего предложения, кажется, что массив, выделенный внутри 'function1', копируется в' a'. Я понимаю, что после вызова 'function1' массив, выделенный функцией, доступен как переменная' a', 'function1' не занимает лишнюю память. –
Я думал, что, поскольку он выделяет массив там, для этого потребуется память. Я полагаю, что это не так? –
Как я (и еще до сих пор!) понять ситуацию, когда функция возвращает выделение памяти вызывающей подпрограмме, которая вызывает выделенную память 'a'. Существует только одно распределение памяти. –