포트란 코드에서이 이상한 런타임 유형 오류가 발생합니다. 사용자 정의 유형 B의 사용자 정의 유형에 대한 포인터가 있습니다. 유형 B의 프로 시저에서 유형 A와 연관된 프로 시저를 호출하면 배열에 이미 할당 된 런타임 오류가 할당됩니다. 아무도이 오류를 보았습니까?fortran 90 할당 가능한 배열이 호출 유형 바인딩 절차에 이미 할당되었습니다.
죄송합니다. 코드를 표시 할 수 없습니다. 그러나 여기에 대략 무슨 일이 일어나고있는 것입니다.
type B
type(A),pointer :: obj
contains
procedure :: do_something
end type B
type A
integer,allocatable:: long_array(:)
contains
procedure :: do_something_to_long_array
end type A
program main
type(B) :: obj1
type(A) ,target :: obj2
allocate(obj2%long_array(10))
obj1%obj=>obj2
call obj1%obj%do_something_to_long_array()
end program main
do_something_to_long_array를 호출하면 오류가 발생합니다. 프로 시저가 내 코드에서 구현되며 객체에서 직접 호출 될 때 작동합니다. long_array 내부의 값에도 액세스 할 수 있습니다. 그러나 서브 루틴을 호출 할 수 없습니다.
예, 오류가 발생했습니다. 그것은 이미 할당 된 배열을 할당하려고 할 때 발생합니다. 내가 보지 못한 것은 당신을 돕기 위해 SO를 돕는 코드입니다. –
문제가 해결되었습니다. 이것은 내가 사용하고 있던 인텔 컴파일러의 버전과 관련이 있습니다. 최신 버전으로 이전하면 문제가 해결되었습니다. –