I\'m using gfortran -std=f2008. I have a function that returns a derived type which contains an allocatable array. The function calls allocate() before it returns. It see
Another general advice : most of the time, it is much safer to use subroutines instead of functions for returning complicated results like arrays, pointers, derived types with allocatable inside...
Additional question : do you use your function within an expression ? If not then it should be a subroutine. Fortran functions have only interest if used within calculation expressions.
A universal answer: allocatable arrays are automatically deallocated when going out of scope. Function results are automatically deallocated after the result is "used" in the outer scope. Allocatable components are deallocated, when the parent derived type variable is going out of scope, or when it is deallocated.
Only pointers
, that pointed to the function results are undefined after the deallocation and shall not be used. If you do that, it could cause the problems you describe.
Also, when an array is automatically reallocated on assignment, the pointers to it become undefined (but may not change, actually).
In other words, problems you describe shouldn't occur when the allocatables are used correctly.