2012-02-07 2 views
7

Fortran에서 링크 된 목록을 사용하여 정의되지 않은 길이의 데이터 배열을 보유하고 싶습니다.Fortran은 어떻게 링크 된 목록을 할당 해제합니까?

TYPE linked_list 
    INTEGER :: data 
    TYPE(linked_list) :: next_item => NULL() 
END TYPE 

지금 나는 그런 목록을 만들라고 :

나는 다음과 같은 설정을 가지고

DEALLOCATE(example_list) 

할 모든 : 내가 수행하는 경우

TYPE(LINKED_LIST) :: example_list 
example_list%data =1 
ALLOCATE(example_list%next_item) 
example_list%next_item%data = 2 
ALLOCATE(example_list%next_item%next_item) 
example_list%next_item%next_item%data = 3 

내 질문은, 중첩 된 레벨도 할당을 해제하거나 목록을 가장 깊은 요소로 이동하고 가장 깊은 요소에서 할당을 해제해야합니다. 위쪽으로?

+4

같은

사용은 내가 포트란에서 이런 짓을하기 때문에 오랜 시간이,하지만 난 당신이 수동으로 할당 해제해야 확신합니다. 머리를 할당 해제하면 참조를 잃어 버리고 메모리 누수가 발생합니다. – ChrisF

+0

예. 나는 그것을 두려워했다. 나는 말을해야한다, 나는 문제가있다, 어떤 구절 이냐, 나 자신의 가비지 수집을 굴리는 것? – EMiller

+0

메모리 관리 포트란을 구현할 수 없습니다. –

답변

9

각 노드를 수동으로 할당 해제해야합니다. 여기서 "객체 지향적"스타일이 유용합니다.

주의 사항 : 자정이 지나서야 브라우저가 제대로 코딩되지 않습니다. 이 코드는 작동하지 않을 수 있습니다. 그것은 단지 레이아웃입니다. 이

program foo 
    use LinkedListModule 
    type(LinkedListType) :: list 

    call New(list) 
    call Append(list, 3) 
    call Delete(list) 
end program 
+1

빙고. DeleteImpl 메서드는 내가 찾고있는 메서드입니다. 이 객체 지향 포트란은 얼마나 멋지고 깔끔합니다. – EMiller

+1

@emiller : 객체 지향적이지 않습니다. 그것은 객체 지향 스타일입니다. –

+0

'Append '는 머리부터 꼬리까지 전체 목록을 스윕하므로 매우 비효율적입니다.꼬리 노드를 추적하고 새 노드를 추가하는 것이 좋습니다. 왜'LinkedListType'과'LinkedListEntryType'을 구별합니까? –

관련 문제