andy8496 发表于 2015-9-9 14:15 Fortran没有内联函数,它实际上类似于宏之类的,Fortran 也可以预定义;不建议使用 |
楚香饭 发表于 2015-9-9 17:17 楼主,高手!! |
这提示明显是你把栈内数据破坏了,应该是越界使用了。 |
好的,看了之前那么多数组的deallocate有点多余了。 我再琢磨琢磨。 谢谢了! |
单向串表,一般用递归函数释放。 双向串表就简单一些。 子程序里的可分配数组,无需释放(退出子程序时会自动释放) 但子程序里分配的指针,必须释放,否则会内存泄露。 |
比如,一个文件中有十几种对象,这些对象的个数都不知道。读取的时候,如果要先获取这些对象的数量,就要先把文件逐行读取、解析一遍,获取各个对象的数量,然后分配好,然后再读取、解析一遍,获取各个对象的参数,这个,应该没有用上指针,一次读取、解析完效率高吧? 其实吧,也不会有太大影响。数据量比较大,后面的编码一定要这么干了。前面的要不要改我再权衡下吧!谢谢了! 还有就是上面问到的问题,这么用指针: 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? |
怎么会效率下去呢? 1.先获得大小 2.返回,分配 3.再读取 和直接调用,也一样要获得大小,分配,再读取呀。 不过是分两个过程而已,实际要做的事情是一样的。所以没有太大的差别的。 最好是严格执行“谁分配谁释放” 语法是没有考虑DLL的问题的,我不确定编译器能不能在DLL里处理好语法中所有的标准。至少 newunit 这种都处理不好。 |
本帖最后由 andy8496 于 2015-9-9 14:37 编辑 刚异想天开想的想法: Fortran有没有类似C++的内联函数?或者有没有什么编译选项能实现“内联”的效果? 这样在编译的时候,直接吧被调用的内联函数复制到调用函数中,我在调用函数中释放,是不是没问题了? |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-12-25 22:09