2012-07-18 2 views
0

포트란 코드에서이 이상한 런타임 유형 오류가 발생합니다. 사용자 정의 유형 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 내부의 값에도 액세스 할 수 있습니다. 그러나 서브 루틴을 호출 할 수 없습니다.

+1

예, 오류가 발생했습니다. 그것은 이미 할당 된 배열을 할당하려고 할 때 발생합니다. 내가 보지 못한 것은 당신을 돕기 위해 SO를 돕는 코드입니다. –

+0

문제가 해결되었습니다. 이것은 내가 사용하고 있던 인텔 컴파일러의 버전과 관련이 있습니다. 최신 버전으로 이전하면 문제가 해결되었습니다. –

답변

0

당신이 해결 한 것처럼 보이지만, 단지 그것의 지옥에 대해, "유형 A"의 할당 가능한 배열은 iffy입니다. 형식 정의에 할당 가능한 배열을 갖는 것은 FORTRAN90의 많은 버전에서 최근까지 가능하지 않았습니다. 그리고 "이미 할당 된"오류는 추락했을 때 반환됩니다. 나는 아마도 이것이 오래된 컴파일러가 작동하지 않는 동안 새로운 컴파일러가 작동하는 이유라고 생각한다.

+0

나는 그것을 몰랐다. 나는 대부분 파이썬에서 최근까지 프로그래밍을하고있었습니다. 포트란 90은 속도 편익과 함께 매우 파이썬으로 프로그래밍 할 수있는 것처럼 보인다. 많은 숫자 문제가 필요하기 때문에 유형 내에 할당 가능한 배열을 허용하지 않는 것은 무의미한 것처럼 보입니다. –