Fortran Coder

查看: 13620|回复: 13
打印 上一主题 下一主题

[调试器] Debug才有的问题

[复制链接]

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
跳转到指定楼层
楼主
发表于 2015-9-9 00:33:34 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
遇到一个问题:Debug模式的时候,运行到一个奇怪的问题,运行到一个subroutine的end subroutine的时候,就弹出了附件中中的窗口,这时候查看输出参数的值,已经有了我想要的结果。Release的时候就不会有这个问题。
何解?

000000000.png (11.13 KB, 下载次数: 484)

000000000.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

9

帖子

1

主题

0

精华

入门

F 币
47 元
贡献
12 点
14#
发表于 2015-9-18 12:30:41 | 只看该作者
andy8496 发表于 2015-9-9 14:15
刚异想天开想的想法:
Fortran有没有类似C++的内联函数?或者有没有什么编译选项能实现“内联”的效果?
这 ...

Fortran没有内联函数,它实际上类似于宏之类的,Fortran 也可以预定义;不建议使用

9

帖子

1

主题

0

精华

入门

F 币
47 元
贡献
12 点
13#
发表于 2015-9-18 12:29:09 | 只看该作者
楚香饭 发表于 2015-9-9 17:17
单向串表,一般用递归函数释放。
双向串表就简单一些。

楼主,高手!!

6

帖子

0

主题

0

精华

入门

F 币
57 元
贡献
30 点
12#
发表于 2015-9-10 18:51:05 | 只看该作者
这提示明显是你把栈内数据破坏了,应该是越界使用了。

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
11#
 楼主| 发表于 2015-9-10 10:05:21 | 只看该作者
好的,看了之前那么多数组的deallocate有点多余了。
我再琢磨琢磨。
谢谢了!

739

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
711 元
贡献
365 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

10#
发表于 2015-9-9 17:17:10 | 只看该作者
单向串表,一般用递归函数释放。
双向串表就简单一些。

子程序里的可分配数组,无需释放(退出子程序时会自动释放)
但子程序里分配的指针,必须释放,否则会内存泄露。

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
9#
 楼主| 发表于 2015-9-9 15:33:50 | 只看该作者
比如,一个文件中有十几种对象,这些对象的个数都不知道。读取的时候,如果要先获取这些对象的数量,就要先把文件逐行读取、解析一遍,获取各个对象的数量,然后分配好,然后再读取、解析一遍,获取各个对象的参数,这个,应该没有用上指针,一次读取、解析完效率高吧?
其实吧,也不会有太大影响。数据量比较大,后面的编码一定要这么干了。前面的要不要改我再权衡下吧!谢谢了!

还有就是上面问到的问题,这么用指针:
  type(pl), pointer :: pP,hP
......
  allocate( hP )
  pP=>hP
  nullify(hP%next)
  
    do j=1,icount
      pP%i= iarray(j)
      allocate( pP%next )
      pP=>pP%next
    enddo

  pP=>hP
  do i=1,icount
    iarray1(i) = pP%i
    if ( .not. associated(pP%next) ) exit
    pP=>pP%next
  enddo
完了我该怎么释放啊?以及一些子程序中间的不定长度数组,在退出子程序的时候要不要deallocate?

739

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
711 元
贡献
365 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

8#
发表于 2015-9-9 14:50:29 | 只看该作者
怎么会效率下去呢?
1.先获得大小
2.返回,分配
3.再读取
和直接调用,也一样要获得大小,分配,再读取呀。
不过是分两个过程而已,实际要做的事情是一样的。所以没有太大的差别的。

最好是严格执行“谁分配谁释放”

语法是没有考虑DLL的问题的,我不确定编译器能不能在DLL里处理好语法中所有的标准。至少 newunit 这种都处理不好。

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
7#
 楼主| 发表于 2015-9-9 14:36:02 | 只看该作者
“重试”,继续运行,程序就走到这儿了:

11.jpg (435.89 KB, 下载次数: 484)

11.jpg

22.jpg (260.47 KB, 下载次数: 465)

22.jpg

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
6#
 楼主| 发表于 2015-9-9 14:15:29 | 只看该作者
本帖最后由 andy8496 于 2015-9-9 14:37 编辑

刚异想天开想的想法:
Fortran有没有类似C++的内联函数?或者有没有什么编译选项能实现“内联”的效果?
这样在编译的时候,直接吧被调用的内联函数复制到调用函数中,我在调用函数中释放,是不是没问题了?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-25 22:18

Powered by Tencent X3.4

© 2013-2024 Tencent

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