Взаимодействуя с Fortran 77 результатов подпрограммы в ошибке «Invalid доступа к памяти» с кодом, который я суммированы ниже:Недопустимый доступ к памяти с Fortran 77 подпрограммой
subroutine mysub1()
parameter :: kk=22
real, dimension(KK) :: A
call F77SUB(A)
end
subroutine mysub2()
parameter, integer :: kk=22
real, dimension(:,:), allocatable :: A
integer :: jj
jj = 12
allocate(A(kk,jj))
call F77SUB(A(:,1)) ! ERROR: Invalid memory access
end
Где F77SUB является Фортран подпрограммой Я пытаюсь который берет 1D-массив и записывает на него. В приведенном выше коде mysub1
работает, но mysub2
нет.
Может ли кто-нибудь предположить, что проблема выше, или предоставить подробную информацию о том, как массивные аргументы фактически передаются между подпрограммами F90 и F77? Я видел экземпляры скаляров, передаваемых в подпрограммы F77, которые, по-видимому, просто берут адрес памяти скаляра в начало массива. Любое просвещение будет оценено по достоинству.
вы можете отредактировать свой вопрос, чтобы исправить это, а не комментировать. Кроме того, используется 'jj' перед распределением? Если нет, то что это? Что такое интерфейс для 'F77SUB' и как фиктивная переменная' A' объявлена внутри этой функции (предполагается, что функция, потому что 'CALL' отсутствует?) – casey
вы уверены, что' F77SUB' не имеет доступа к массиву (или что-то еще) за границами? – agentp