回 帖 发 新 帖 刷新版面

主题:数组内存溢出

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个回复)

沙发

dis(j)=((est_x(ii)-sta_x(j))*eps)**2+((est_y(ii)-sta_y(j))*eps)**2
这里的ii就多少?

板凳

[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 楼


补充说明:这是在linux下intel Fortran编译器,使用ifort -o 选项

4 楼

楼主, 你设置了很多pause, 前面一个回有dis(1), dis(2), 但接下来的那个循环j是由2开始的, dis(1)应该不出现吧. 你在pause 后面加个整数数值标识一下会不会是自己看错?

5 楼

[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 楼

print*,'dis',n,dis(n),j,dis(j);pause 100
这样暂定的时候会显示100 就知道是这个pause起作用了.
既然没有搞错的话, 那确实很奇怪, 可否帖完整代码?

7 楼

[quote]print*,'dis',n,dis(n),j,dis(j);pause 100
这样暂定的时候会显示100 就知道是这个pause起作用了.
既然没有搞错的话, 那确实很奇怪, 可否帖完整代码?[/quote]
代码太长了,可否各个邮箱或qq,我把文件发给你?

8 楼

yeg001@foxmail.com 这个就可以。 不过我不一定能及时回复。

9 楼

你的邮箱真是多啊,神马邮箱都有……

10 楼

[quote]yeg001@foxmail.com 这个就可以。 不过我不一定能及时回复。[/quoxi谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册