Fortran Coder

楼主: caimaxwell
打印 上一主题 下一主题

[指针] allocatable和pointer区别

[复制链接]

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

楼主
发表于 2023-5-11 08:39:24 | 显示全部楼层
allocatable 在生命周期结束时,编译器会自动释放。而 pointer 不会。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2023-5-11 11:35:52 | 显示全部楼层
光说报错,跑不了。不说错误提示,现象,截图。等于甩流氓

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

板凳
发表于 2023-5-11 14:30:49 | 显示全部楼层
caimaxwell 发表于 2023-5-11 11:02
谢谢前辈的回答,但是我还有疑问,能够自动释放的话,那deallocate是干啥的? ...

1. 释放pointer也需要deallocate
2. 在生命周期结束前,手动释放,某些情况下,也是有必要的。
例如,手动释放后重新分配成其他大小,手动释放以减少内存占用(给其他数据腾出内存)

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

地板
发表于 2023-5-11 14:38:59 | 显示全部楼层
caimaxwell 发表于 2023-5-11 11:51
111是不注释的报错,222是不注释,且在某行加个write的报错。原来矩阵求逆是没问题的
...

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

可能的情况是:
1. 内存占用过大,导致堆栈或其他内存部分处于溢出或濒临溢出的边缘。出现一些细微变化就导致两种后果。尝试改到64位编译?
2. 注释掉 SUMatrix 后,你改动了其他部分。因为我想你不太可能定义一个从来不用到的数组。
3. 你是否调用了其他第三方函数库,或者其他语言编写的内容部分。导致堆栈失衡?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-3 02:03

Powered by Tencent X3.4

© 2013-2024 Tencent

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