【发布时间】:2012-02-07 22:02:45
【问题描述】:
我想在 Fortran 中使用链表来保存未定义长度的数据数组。
我有以下设置:
TYPE linked_list
INTEGER :: data
TYPE(linked_list) :: next_item => NULL()
END TYPE
现在说我创建了这样一个列表:
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
我的问题是,如果我执行:
DEALLOCATE(example_list)
所有嵌套级别也会被释放,还是我需要遍历列表到最深的元素并从最深的元素向上释放?
【问题讨论】:
-
我已经很长时间没有在 Fortran 中这样做了,但我很确定你必须手动解除分配。如果您只是解除分配头,那么您将丢失引用并发生内存泄漏。
-
是的。我很害怕那个。不过我必须说,我遇到了麻烦,这句话是什么意思,滚动我自己的垃圾收集?
-
你不能实现内存管理的fortran。
-
这是讽刺还是事实陈述?
-
@emiller 保持所有数组可分配。将每个 allocate 语句与一个 deallocate 语句配对。仅在必要或非常方便时使用指针。如果你遵循这三个,你会没事的。 Fortran 强制你跟踪你的记忆,我真的很欣赏 Fortran - 它不鼓励懒惰的编程,让你更好地了解你的程序。很好的问答。
标签: pointers memory-management linked-list fortran