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
|