Fortran Coder

查看: 7752|回复: 1
打印 上一主题 下一主题

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

[复制链接]

35

帖子

17

主题

0

精华

熟手

F 币
136 元
贡献
240 点
跳转到指定楼层
楼主
发表于 2015-12-21 12:42:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
01    module MNodeElement
02    implicit none
03 
04    type,public :: CElementNode
05                    integer :: ChannelLabel = 0
06        type(CElementNodeArray),dimension(:),pointer :: pAdditionalNode => null()               
07    contains       
08        procedure,public :: initNodeElement
09            end type CElementNode
10                 
11                type,public :: CElementNodeArray
12                    type(CElementNode),pointer :: pElementNode
13        end type CElementNodeArray
14                 
15                contains
16                    subroutine initNodeElement(this)
17                            class(CElementNode) :: this
18                                integer :: istat
19                                this%ChannelLabel = 0
20                            allocate(this%pAdditionalNode(6),stat=istat)
21                                if (istat /= 0) then
22                                    print*,"creat pAdditionalNode failed,istat =",istat
23                                end if
24                        end subroutine initNodeElement                                         
25                 
26end module
27         
28           program main
29                   use MNodeElement
30       implicit none
31                       logical :: flag = .false.                               
32                       type(CElementNode) :: pNode
33        
34                       call pNode%initNodeElement()
35                       ! 生成了pAdditionalNode的指针
36                       ! pAdditionalNode=>null()
37                       ! 但是 flag 显示为 .ture.
38       flag = associated (pNode%pAdditionalNode(1)%pElementNode)
39               end program
40                        
41                       

编译环境visual2010+ivf2013:
调试过程值:
[Fortran] 纯文本查看 复制代码
1pNode%PADDITIONALNODE(1)%PELEMENTNODE%CHANNELLABEL                  Undefined address        INTEGER(4)
2pNode%PADDITIONALNODE(1)%PELEMENTNODE%PADDITIONALNODE          Undefined address        TYPE(CELEMENTNODE_mp_CELEMENTNODEARRAY)
3pNode%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是空的
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

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

沙发
发表于 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, 2025-5-1 19:09

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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