At 05:58 PM 1/9/2005, Greg Lindahl wrote:
>Our compiler checks at run-time to make sure a pointer in a DEALLOCATE
>call points to something allocated by ALLOCATE. In the following
>program, we throw a run-time error and other compilers don't. I'm
>asserting that since V in the function DEALLOC is a REAL, the
>information that it is actually allocated is lost. Am I correct?
>
>-- greg
>
>MODULE deallocate_
>
>CONTAINS
>
> INTEGER FUNCTION DEALLOC(V)
> INTEGER :: STATUS
> ! REAL, POINTER :: V works for everyone
> REAL, TARGET :: V
> REAL, POINTER :: VP
> VP => V
> DEALLOCATE (VP, STAT = STATUS)
> DEALLOC = STATUS
> END FUNCTION DEALLOC
>
>END MODULE deallocate_
>
>PROGRAM VECTORCLASS
> USE deallocate_
> IMPLICIT NONE
> REAL, POINTER :: VP
> INTEGER :: STATUS
> ALLOCATE( VP, STAT = STATUS)
> WRITE( *, *) ' Allocate STATUS = ', STATUS
> STATUS = DEALLOC (VP)
> WRITE( *, *) 'Deallocate STATUS = ', STATUS
>END
gfortran greg.f90
$ ./a
Allocate STATUS = 0
Deallocate STATUS = 4
Tim Prince
|