Fortran Coder

查看: 2846|回复: 2
打印 上一主题 下一主题

[派生类型] 结构体传出来的数组会改变

[复制链接]

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
跳转到指定楼层
楼主
发表于 2022-9-14 13:33:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zjk0112 于 2022-9-14 13:35 编辑

我用MKl中CSR格式的结构体遇到了如下:在调用subroutine identity_matrix_sparse1时,打印出来的n为3,但export传出来三元组中的CSR_val值异常(图2);若在identity_matrix_sparse1中重新赋值常量nn=3替换所有n,则export传出的三元组中的CSR_VAl的值正常(图1)。
我的问题:1.这里面哪里影响了n.2在subroutine中创建结构体,再将出来是否会破坏结构体。3.这里面涉及到C到Fortran的指针转换,会不会对常量有影响?

2.png (10.18 KB, 下载次数: 194)

1

1

1.png (9.2 KB, 下载次数: 197)

2

2

BadFile.f90

4.45 KB, 下载次数: 3

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
沙发
 楼主| 发表于 2022-9-14 13:52:47 | 只看该作者
我又尝试了,如果用动态数组则替代固定数组则可以避免这样的问题。

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
板凳
 楼主| 发表于 2022-9-20 16:58:16 | 只看该作者
经过了一周的研究和尝试,我终于找到了错误产生的原因:在subroutine identity_matrix_sparse1产生的结构体需要用到局部变量,而局部变量在默认会清空,导致结构体错误。所以,解决的方法也很简单,只需要在子例程subroutine identity_matrix_sparse1中加save语句即可。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 01:42

Powered by Tencent X3.4

© 2013-2024 Tencent

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