Fortran Coder

Debug才有的问题

查看数: 12872 | 评论数: 13 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-9-9 00:33

正文摘要:

遇到一个问题:Debug模式的时候,运行到一个奇怪的问题,运行到一个subroutine的end subroutine的时候,就弹出了附件中中的窗口,这时候查看输出参数的值,已经有了我想要的结果。Release的时候就不会有这个问题。 ...

回复

xiaoswjp 发表于 2015-9-18 12:30:41
andy8496 发表于 2015-9-9 14:15
刚异想天开想的想法:
Fortran有没有类似C++的内联函数?或者有没有什么编译选项能实现“内联”的效果?
这 ...

Fortran没有内联函数,它实际上类似于宏之类的,Fortran 也可以预定义;不建议使用
xiaoswjp 发表于 2015-9-18 12:29:09
楚香饭 发表于 2015-9-9 17:17
单向串表,一般用递归函数释放。
双向串表就简单一些。

楼主,高手!!
好小爱新 发表于 2015-9-10 18:51:05
这提示明显是你把栈内数据破坏了,应该是越界使用了。
andy8496 发表于 2015-9-10 10:05:21
好的,看了之前那么多数组的deallocate有点多余了。
我再琢磨琢磨。
谢谢了!
楚香饭 发表于 2015-9-9 17:17:10
单向串表,一般用递归函数释放。
双向串表就简单一些。

子程序里的可分配数组,无需释放(退出子程序时会自动释放)
但子程序里分配的指针,必须释放,否则会内存泄露。
andy8496 发表于 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?
楚香饭 发表于 2015-9-9 14:50:29
怎么会效率下去呢?
1.先获得大小
2.返回,分配
3.再读取
和直接调用,也一样要获得大小,分配,再读取呀。
不过是分两个过程而已,实际要做的事情是一样的。所以没有太大的差别的。

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

语法是没有考虑DLL的问题的,我不确定编译器能不能在DLL里处理好语法中所有的标准。至少 newunit 这种都处理不好。
andy8496 发表于 2015-9-9 14:15:29
本帖最后由 andy8496 于 2015-9-9 14:37 编辑

刚异想天开想的想法:
Fortran有没有类似C++的内联函数?或者有没有什么编译选项能实现“内联”的效果?
这样在编译的时候,直接吧被调用的内联函数复制到调用函数中,我在调用函数中释放,是不是没问题了?

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

GMT+8, 2024-5-9 10:12

Powered by Tencent X3.4

© 2013-2024 Tencent

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