结束了结束了,找到了 就是数组越界,问题就出在10#说的,解决办法两种:1是换成用来计算矩阵-向量乘法的sgemv(),2是直接将这个向量定义为一行或一列的二维数组,我目前是嫌麻烦直接用了法2,成功且正确计算了。 但这也产生一个新的问题:对于能存储同样大小数据的数组,一维二维数组的区别在哪里,内存上又是怎么体现的? 就Fortran而言,定义 A(2,1) 和 定义A(2) 的区别是啥,只是shape()的区别吗? C语言等其他默认数组下标从0开始的数组是不是就没有这个问题因为它们不能定义成A(1,0)? 求大佬解答 |
ALLOCATE和DEALLOCATE增加状态判断试试,比如ALLOCATE(S(100), STAT=sv]) ,然后比较sv是否为0判断是否正常分配数组。 |
Transpose 发表于 2023-4-12 20:47 好的,感谢大佬提供思路 |
你可以多加一些print看看 另外,可以再用gfortran编译试试 ,两种编译器同时使用,结合起来可能会有效果, 编译的时候加上-fcheck=all |
Transpose 发表于 2023-4-12 20:22 谢谢大佬,不过我写得shit一样,真不想污染大家的眼睛,小小简单算法还三四百行,惭愧啊,我自己再找找,刚才还发现了一些数组的数值不知怎么被改成了极其离谱的数据,想着再从这方面切入去找一找。或者是因为动态数组的隐藏自动分配? 不过既然有的循环能出现正确的结果那说明代码应该没问题,应该是内存或者优化不够的问题吧。 |
没法判断,可能需要源代码 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 11:09