J3/04-378 Date: 23 September 2004 To: J3 From: Aleksandar Donev Subject: DEALLOCATE and array pointers NUMBER: TITLE: DEALLOCATE and array pointers KEYWORDS: DEALLOCATE, array pointers DEFECT TYPE: STATUS: J3 consideration in progress QUESTION: We currently say that one can deallocate an array pointer if it points to the "whole of an object that was created by allocation". What exactly does "whole" mean in this rule? Specifically, is the following allowed: REAL, DIMENSION(:), POINTER :: a, b ALLOCATE(a(1:10)) b=>a(1:10) DEALLOCATE(b) ANSWER: Choice 1. Yes, this is allowed, since "whole" means that b is ASSOCIATED with all elements of an array that was ALLOCATEd. In the given example, ASSOCIATED(a,b) is .TRUE., therefore either a or b can be used to DEALLOCATE the memory. Choice 2. No, this was not meant to be allowed. "Whole" is meant to convey that b must be pointer associated with a whole array, rather than an array section. Since a(1:10) is a section and not a whole array b cannot be used to deallocate the memory. Note that some existing compilers implement choice 2, that is, they give a runtime error when executing the DEALLOCATE statement above. EDITS: SUBMITTED BY: Aleksandar Donev HISTORY: 04-378 m170 Submitted