Fortran Coder

allocatable和pointer区别

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

正文摘要:

想问问前辈们,在type时,allocatable和pointer区别。我这里的type下,把SUMatrix注释掉,就能跑,加上这个SUMatrix就报错,是什么原因呢?[Fortran] 纯文本查看 复制代码type Subblocks     integer*4&nb ...

回复

caimaxwell 发表于 2023-5-11 16:55:20
问题没解决,但是run起来了,只是在某行加了个write.....所以算解决了..   谢谢前辈们!
楚香饭 发表于 2023-5-11 14:38:59
caimaxwell 发表于 2023-5-11 11:51
111是不注释的报错,222是不注释,且在某行加个write的报错。原来矩阵求逆是没问题的
...

根据你的代码片段和错误提示,无法直接检查出原因。

可能的情况是:
1. 内存占用过大,导致堆栈或其他内存部分处于溢出或濒临溢出的边缘。出现一些细微变化就导致两种后果。尝试改到64位编译?
2. 注释掉 SUMatrix 后,你改动了其他部分。因为我想你不太可能定义一个从来不用到的数组。
3. 你是否调用了其他第三方函数库,或者其他语言编写的内容部分。导致堆栈失衡?
楚香饭 发表于 2023-5-11 14:30:49
caimaxwell 发表于 2023-5-11 11:02
谢谢前辈的回答,但是我还有疑问,能够自动释放的话,那deallocate是干啥的? ...

1. 释放pointer也需要deallocate
2. 在生命周期结束前,手动释放,某些情况下,也是有必要的。
例如,手动释放后重新分配成其他大小,手动释放以减少内存占用(给其他数据腾出内存)
楚香饭 发表于 2023-5-11 11:35:52
光说报错,跑不了。不说错误提示,现象,截图。等于甩流氓
caimaxwell 发表于 2023-5-11 11:28:19
li913 发表于 2023-5-11 11:03
编译可以通过,但是容易混乱。例如 fortran允许定义一个变量 叫 real,但没人这么干。 ...

以上代码里,将21行的SUMatrix注释掉程序可运行,为什么不注释程序就跑不了了呢?在某行加个write程序又能跑,但是之前没问题的地方又报错(比如矩阵求逆,注释掉矩阵求逆没问题,不注释矩阵就求逆错误),这个大概是什么问题呢?求解答
li913 发表于 2023-5-11 11:07:32
caimaxwell 发表于 2023-5-11 11:02
谢谢前辈的回答,但是我还有疑问,能够自动释放的话,那deallocate是干啥的? ...

deallocate可以释放动态数组或指针。动态数组自动释放只发生在退出作用域时,当然一般会手写deallocate,更规范,更方便阅读。如果中途需要释放或重新分配,只能手动。
li913 发表于 2023-5-11 11:03:06
caimaxwell 发表于 2023-5-11 10:59
这地方的重名会有影响吗?我的原意是写一个iblocks(i)%subblocks(j)%nr(a1:b1,a2:b2)。我需要修改一下嘛 ...

编译可以通过,但是容易混乱。例如 fortran允许定义一个变量 叫 real,但没人这么干。
caimaxwell 发表于 2023-5-11 11:02:36
楚香饭 发表于 2023-5-11 08:39
allocatable 在生命周期结束时,编译器会自动释放。而 pointer 不会。

谢谢前辈的回答,但是我还有疑问,能够自动释放的话,那deallocate是干啥的?

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

GMT+8, 2024-5-7 12:11

Powered by Tencent X3.4

© 2013-2024 Tencent

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