2010-10-26 17 views

Odpowiedz

9

zrobić nie widzę żadnej zasadniczej różnicy w tym scenariuszu.

Ogólnie rzecz biorąc, ALLOCATABLE arrays are more efficient. Jednak w tablicach Fortran 90/95 POINTER były bardziej elastyczne. Na przykład nie było możliwe użycie tablic ALLOCATABLE jako składników typów pochodnych. Fortran 2003 rozwiązał ten problem. Używaj tablic ALLOCATABLE, kiedy tylko możesz.

EDIT

prostu chcesz wymienić znaczną różnicę w zachowaniu programu na próbę przyporządkowania już przydzieloną jednostkę. Jeśli jednostka jest CAŁKOWITA, otrzymasz błąd czasu wykonywania. Program

PROGRAM main 

    IMPLICIT NONE 

    TYPE :: foo 
    REAL, DIMENSION(:), ALLOCATABLE :: bar 
    END TYPE foo 

    TYPE(foo) :: my_foo 

    ALLOCATE (my_foo%bar(10)) 
    ALLOCATE (my_foo%bar(10)) 

END PROGRAM main 

zestawiane z wynikami gfortran w takim komunikatem o błędzie:

Fortran runtime error: Attempting to allocate already allocated variable 'my_foo' 

Natomiast można robić takie rzeczy ze wskaźnikami.

+0

Warto wspomnieć, że wywołanie instrukcji allocate na skojarzonym wskaźniku może spowodować wyciek pamięci (jeśli żaden inny wskaźnik nie wskazuje pierwotnego celu). –