Fortran Coder

查看: 6964|回复: 1

[派生类型] TYPE包含procedure,初始化如何置空

[复制链接]

35

帖子

17

主题

0

精华

熟手

F 币
136 元
贡献
240 点
发表于 2015-12-21 12:42:35 | 显示全部楼层 |阅读模式
[Fortran] 纯文本查看 复制代码
             module MNodeElement
             implicit none
        
             type,public :: CElementNode
                             integer :: ChannelLabel = 0
                 type(CElementNodeArray),dimension(:),pointer :: pAdditionalNode => null()                
             contains        
                 procedure,public :: initNodeElement
                     end type CElementNode
                         
                         type,public :: CElementNodeArray
                             type(CElementNode),pointer :: pElementNode
                 end type CElementNodeArray
                         
                         contains
                             subroutine initNodeElement(this)
                                     class(CElementNode) :: this
                                         integer :: istat
                                         this%ChannelLabel = 0
                                     allocate(this%pAdditionalNode(6),stat=istat)
                                         if (istat /= 0) then
                                             print*,"creat pAdditionalNode failed,istat =",istat
                                         end if
                                 end subroutine initNodeElement                                          
                         
         end module
                 
                    program main
                            use MNodeElement
                implicit none
                                logical :: flag = .false.                                
                                type(CElementNode) :: pNode
                
                                call pNode%initNodeElement()
                                ! 生成了pAdditionalNode的指针
                                ! pAdditionalNode=>null()
                                ! 但是 flag 显示为 .ture.
                flag = associated (pNode%pAdditionalNode(1)%pElementNode)
                        end program
                                
                                
             

编译环境visual2010+ivf2013:
调试过程值:
[Fortran] 纯文本查看 复制代码
pNode%PADDITIONALNODE(1)%PELEMENTNODE%CHANNELLABEL                  Undefined address        INTEGER(4) 
pNode%PADDITIONALNODE(1)%PELEMENTNODE%PADDITIONALNODE          Undefined address        TYPE(CELEMENTNODE_mp_CELEMENTNODEARRAY) 
pNode%PADDITIONALNODE(1)%PELEMENTNODE%INITNODEELEMENT          #BAADF00D                        PROCEDURE

问题
pAdditionalNode指针初始化为空,但associated(pNode%pAdditionalNode%pElement)为.true.,
其中pNode%PADDITIONALNODE(1)%PELEMENTNODE%INITNODEELEMENT过程未初始化,赋值为一个十六进制数
求教,如何将pNode%PADDITIONALNODE(1)%PELEMENTNODE置空

ps:gfortran中这样执行后,pNode%PADDITIONALNODE(1)%PELEMENTNODE是空的

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2015-12-21 12:59:38 | 显示全部楼层
第12行
type(CElementNode),pointer :: pElementNode
改为
type(CElementNode),pointer :: pElementNode => null()
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 18:47

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表