主题:数组内存溢出
Amely
[专家分:10] 发布于 2011-07-18 20:48:00
dis_cal:do j=1,sta,1
dis(j)=((est_x(ii)-sta_x(j))*eps)**2+((est_y(ii)-sta_y(j))*eps)**2
lab(j)=j
if ((j.eq.1).or.(j.eq.2)) then
print*,'j',dis(j)
end if
end do dis_cal
do n=1,n_no,1
do j=n+1,sta,1
print*,'dis',n,dis(n),j,dis(j);pause
if (dis(j).lt.dis(n)) then
temp_dis=dis(n)
dis(n)=dis(j)
dis(j)=temp_dis
f=lab(n)
lab(n)=lab(j)
lab(j)=f
end if
end do
print *,n,'st sta dis',dis(n),lab(n);pause
end do
第一次打印的结果是dis(1)= 29661,dis(2)= 31505,但是在打印的时候变成了,dis(1)= 17 ,dis(2)=18.好像是内存溢出的问题,但是应该怎么改呢?谢谢各位。第一个循环是计算dis数组的值,然后选出前n_no个数。
回复列表 (共16个回复)
沙发
fortran2008 [专家分:750] 发布于 2011-07-18 21:18:00
dis(j)=((est_x(ii)-sta_x(j))*eps)**2+((est_y(ii)-sta_y(j))*eps)**2
这里的ii就多少?
板凳
Amely [专家分:10] 发布于 2011-07-19 09:52:00
[quote]dis(j)=((est_x(ii)-sta_x(j))*eps)**2+((est_y(ii)-sta_y(j))*eps)**2
这里的ii就多少?[/quote]这里等于1,是计算j个sta到这个est的距离dis(j),然后在选出前n_no个最大数。
3 楼
Amely [专家分:10] 发布于 2011-07-19 10:15:00
补充说明:这是在linux下intel Fortran编译器,使用ifort -o 选项
4 楼
yeg001 [专家分:14390] 发布于 2011-07-19 22:41:00
楼主, 你设置了很多pause, 前面一个回有dis(1), dis(2), 但接下来的那个循环j是由2开始的, dis(1)应该不出现吧. 你在pause 后面加个整数数值标识一下会不会是自己看错?
5 楼
Amely [专家分:10] 发布于 2011-07-20 19:58:00
[quote]楼主, 你设置了很多pause, 前面一个回有dis(1), dis(2), 但接下来的那个循环j是由2开始的, dis(1)应该不出现吧. 你在pause 后面加个整数数值标识一下会不会是自己看错?[/quote]
print*,'dis',n,dis(n),j,dis(j);pause当n=1时,dis(1)就显示出来了。[em1]
6 楼
yeg001 [专家分:14390] 发布于 2011-07-20 21:30:00
print*,'dis',n,dis(n),j,dis(j);pause 100
这样暂定的时候会显示100 就知道是这个pause起作用了.
既然没有搞错的话, 那确实很奇怪, 可否帖完整代码?
7 楼
Amely [专家分:10] 发布于 2011-07-21 10:18:00
[quote]print*,'dis',n,dis(n),j,dis(j);pause 100
这样暂定的时候会显示100 就知道是这个pause起作用了.
既然没有搞错的话, 那确实很奇怪, 可否帖完整代码?[/quote]
代码太长了,可否各个邮箱或qq,我把文件发给你?
8 楼
yeg001 [专家分:14390] 发布于 2011-07-21 10:56:00
yeg001@foxmail.com 这个就可以。 不过我不一定能及时回复。
9 楼
dongyuanxun [专家分:7180] 发布于 2011-07-21 16:03:00
你的邮箱真是多啊,神马邮箱都有……
10 楼
Amely [专家分:10] 发布于 2011-07-21 17:10:00
[quote]yeg001@foxmail.com 这个就可以。 不过我不一定能及时回复。[/quoxi谢谢!
我来回复