主题:请高手帮忙看看这个程序为什么会数组越界?
lockheed123
[专家分:0] 发布于 2011-04-23 11:12:00
主程序
------------------------------------------------
program main
use array
implicit none
integer,allocatable::a(:)
integer::num
integer::i
call arrayin(a,num)
write(*,*) num
do i=1,num
write(*,*) a(i)
end do
end program main
----------------------------
子程序
----------------------------
module array
contains
subroutine arrayin(a,num)
implicit none
integer::num
integer,allocatable::a(:)
integer::i
write(*,*)"input the length of the array"
read(*,*) num
allocate(a(1:num))
write(*,*)"input each element of the array"
do i=1,num
read(*,*) a(i)
end do
end subroutine
end module
--------------------------------------------------
这只是个示例。比如输入num=3,然后输入三个数,最后输出时确实数组越界,请问高手为什么会这样。
回复列表 (共46个回复)
31 楼
cgl_lgs [专家分:21040] 发布于 2011-04-25 18:00:00
[quote]asymptotic兄是比较严谨, 每一个程序都力求尽善尽美. 我觉得pfan这里用fortran的人方向不同, 侧重点也不同, 也没所谓那个更对一些.[/quote]
嗯那:)确实是这样滴:)
32 楼
fortkonglone [专家分:70] 发布于 2011-04-26 22:02:00
[quote]哈哈,其实asymptotic兄是一个很严谨的人,回贴其实也很愿意有根有据的旁征博引。
当然,他确实不是很在意语气问题,之前我也曾误会过他:)
但如果福特恐龙兄看看以前asymptotic兄的回贴就不难发现,他的回帖是很有质量的(不像我这种鼠辈回的大部分是水)。不过近来确实很些新来的人(不仅仅是F区)提问题时似乎不愿意自己先想想,且问题确实很小很基础,大概这样的帖子看长了谁也没味口了,asymptotic兄只是苦口婆心的让他们多自己想想而已。
其实如果问问题的人说:我遇到了某某问题,我分析估计应该是怎么怎么回事儿,但却不得要领,望大家能帮分析分析。
这样的问题相信大家都愿意看见,因为这样问问题的同样可能是菜鸟,但他用脑子了!哪怕是作业贴,这样的帖子大家还是愿意回复的:)[/quote]
asymptotic的水平有目共睹,我也常常受惠良多。作为被教导的菜鸟,我只想坦诚友好的反应真实观感,希望他在语气、姿态方面有所变化的,完全没有怀疑他水平的意思。如果因为施惠方语气、姿态的居高临下,导致对方客观上学到东西感觉却并不好受,更丝毫心生感激,这难道不是挺遗憾、挺美中不足的事情么?但他似乎没看到我的善意,反而着怒了,我也只好悄悄避开了。
33 楼
cgl_lgs [专家分:21040] 发布于 2011-04-26 22:54:00
呵呵,确实有一点刀子嘴豆腐心的嫌疑,不过估计让他改过来很难了:)
咱学着适应吧:)要是看见他回贴当时怒了的话,试着当自己没看见~~~
事后冷静了再看:)
(这可是俺滴秘方喔,一般人俺不告诉他)哈哈哈:)
34 楼
fortkonglone [专家分:70] 发布于 2011-04-27 08:13:00
[quote]呵呵,确实有一点刀子嘴豆腐心的嫌疑,不过估计让他改过来很难了:)
咱学着适应吧:)要是看见他回贴当时怒了的话,试着当自己没看见~~~
事后冷静了再看:)
(这可是俺滴秘方喔,一般人俺不告诉他)哈哈哈:)[/quote]
握爪~
35 楼
cgl_lgs [专家分:21040] 发布于 2011-04-27 09:59:00
[quote][quote]呵呵,确实有一点刀子嘴豆腐心的嫌疑,不过估计让他改过来很难了:)
咱学着适应吧:)要是看见他回贴当时怒了的话,试着当自己没看见~~~
事后冷静了再看:)
(这可是俺滴秘方喔,一般人俺不告诉他)哈哈哈:)[/quote]
握爪~[/quote]
喔也,咱可以试着四爪齐握:)这样难度系数会高些:)但毕竟是并行嘛:)
37 楼
lockheed123 [专家分:0] 发布于 2011-04-27 10:56:00
谢谢楼上上各位,问题基本就算解决了。但是还是不明白为什么在CVF6.6环境下,数组会越界。我的系统是win7的,可能上楼上那位前辈说的与系统有关系。
38 楼
cgl_lgs [专家分:21040] 发布于 2011-04-27 14:23:00
[quote]……[/quote]董兄这是怎么了,一定要注意身体啊:)
39 楼
cgl_lgs [专家分:21040] 发布于 2011-04-27 14:25:00
[quote]谢谢楼上上各位,问题基本就算解决了。但是还是不明白为什么在CVF6.6环境下,数组会越界。我的系统是win7的,可能上楼上那位前辈说的与系统有关系。[/quote]
Fortran95及以下版本是不支持动态数组以传参方式到另一个子程序中分配内存的。
而CVF最高就支持到Fortran95:)
40 楼
dongyuanxun [专家分:7180] 发布于 2011-04-27 14:42:00
[quote]cgl_lgs[quote]你迷恋林月如时,隔壁班花迷恋你;你玩大航海时,学姐裙底流成一片海;你玩帝国时,学妹愿意成为赤裸天使。可是你,什么都没看到,只看到0和1组成的幻想。后来班花被骗走了,学姐嫁人了,学妹死心了。可是你,读着good ending的最后一行文字,泪流满面。[/quote][/quote]
……
我来回复