Fortran Coder

新手求助 有关allocate与deallocate之后数组值为undefined

查看数: 2970 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-4-12 16:36

正文摘要:

使用oneAPI2021里的INF,visual studio2019 编写Fortran程序 代码大致内容如下:在循环外定义十几个可分配的数组,循环中,对一矩阵的每一列进行操作,根据每列都会生成许多不同大小的数组,因此使用动态数组,使用 ...

回复

noobnobb 发表于 2023-4-16 12:53:21
结束了结束了,找到了 就是数组越界,问题就出在10#说的,解决办法两种:1是换成用来计算矩阵-向量乘法的sgemv(),2是直接将这个向量定义为一行或一列的二维数组,我目前是嫌麻烦直接用了法2,成功且正确计算了。
但这也产生一个新的问题:对于能存储同样大小数据的数组,一维二维数组的区别在哪里,内存上又是怎么体现的? 就Fortran而言,定义 A(2,1) 和 定义A(2) 的区别是啥,只是shape()的区别吗?  C语言等其他默认数组下标从0开始的数组是不是就没有这个问题因为它们不能定义成A(1,0)?
求大佬解答
necrohan 发表于 2023-4-14 12:23:31
ALLOCATE和DEALLOCATE增加状态判断试试,比如ALLOCATE(S(100), STAT=sv]) ,然后比较sv是否为0判断是否正常分配数组。
noobnobb 发表于 2023-4-13 09:42:42
Transpose 发表于 2023-4-12 20:47
你可以多加一些print看看
另外,可以再用gfortran编译试试 ,两种编译器同时使用,结合起来可能会有效果, 编译 ...

好的,感谢大佬提供思路
Transpose 发表于 2023-4-12 20:47:08
你可以多加一些print看看
另外,可以再用gfortran编译试试 ,两种编译器同时使用,结合起来可能会有效果, 编译的时候加上-fcheck=all
noobnobb 发表于 2023-4-12 20:28:39
Transpose 发表于 2023-4-12 20:22
没法判断,可能需要源代码

谢谢大佬,不过我写得shit一样,真不想污染大家的眼睛,小小简单算法还三四百行,惭愧啊,我自己再找找,刚才还发现了一些数组的数值不知怎么被改成了极其离谱的数据,想着再从这方面切入去找一找。或者是因为动态数组的隐藏自动分配?   不过既然有的循环能出现正确的结果那说明代码应该没问题,应该是内存或者优化不够的问题吧。
Transpose 发表于 2023-4-12 20:22:26
没法判断,可能需要源代码

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

GMT+8, 2024-5-17 11:27

Powered by Tencent X3.4

© 2013-2024 Tencent

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