Fortran Coder

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

[求助] 求解释:用module里的变量和用数字定义数组为什么结果不同

[复制链接]

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
11#
 楼主| 发表于 2015-5-21 09:08:09 | 只看该作者
pasuka 发表于 2015-5-21 08:48
循环的时候,数组下标呢?有一个或几个超过146了?

没有,在这个子程序中,循环的范围是从1到nx,而nx的值是143,也就是说根本不影响。
如果因为下标超过nx之类的,那么用数字146定义的时候就会报错,然而用146定义数组的话完全没问题。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

12#
发表于 2015-5-21 11:08:28 | 只看该作者
Villain 发表于 2015-5-21 09:08
没有,在这个子程序中,循环的范围是从1到nx,而nx的值是143,也就是说根本不影响。
如果因为下标超过nx之 ...

那就爱莫能助了。。。

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

13#
发表于 2015-5-21 11:54:27 | 只看该作者
把错误提示给出来,完整的,不翻译,不截取。

尝试在越界的函数里下断点,debug 调试。

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
14#
 楼主| 发表于 2015-5-22 08:40:00 | 只看该作者
fcode 发表于 2015-5-21 11:54
把错误提示给出来,完整的,不翻译,不截取。

尝试在越界的函数里下断点,debug 调试。 ...

谢谢指点。
总算debug出来了。

原因是因为程序跳入了一个判断,并直接用cycle循环了do,对njb_new这个数组没有赋值,而njb_new将作为一个数组的下标,当它小于等于0的时候,导致程序出错。
而为什么用nx+3定义会出错而146出错不会,根据我的推测,原因根pasuka指点的一样,是因为save的属性。当用146定义的时候,编译器默认会使用save属性,也就是说上一次的值会保存下来直到重新赋值。而用使用变量(这个例子中是nx)赋值的时候,虽说它的值也是146,但是在每次调用子程序的时候,系统都会对其重置,从而导致出错。

得出结论:
也就是说用变量定义数组和用数字定义数组,性质虽说相同,但是计算机处理的方式不同。
初始化这种东西要时刻铭记于心。
allocate后的数组基本都不会为0,而用直接用integer或者real定义的变量都会自动为0?(这是编译器的效果么?或者编译器与编译器之间有区别?我用的vs2008)

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
15#
 楼主| 发表于 2015-5-22 08:40:50 | 只看该作者
pasuka 发表于 2015-5-21 11:08
那就爱莫能助了。。。

谢谢指点,正如你所说是因为save属性的问题~~~~~

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

16#
发表于 2015-5-22 09:23:27 | 只看该作者
如果你早点把“错误信息”给出来,我们知道是哪个数组越界,早就解决了。我一直以为是 njb_new 本身越界。

错误信息非常非常关键。单纯说“越界”没用,最好是完整的错误提示!

未初始化的变量,其值不确定。(认真理解这句话,理解什么叫“不确定”,老生都不想常谈了)

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

17#
发表于 2015-5-22 12:48:41 | 只看该作者
fcode 发表于 2015-5-22 09:23
如果你早点把“错误信息”给出来,我们知道是哪个数组越界,早就解决了。我一直以为是 njb_new 本身越界。
...

你对lz期望值太高了,ivf好像可以统一给变量赋初值的
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 09:12

Powered by Tencent X3.4

© 2013-2024 Tencent

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