需要帮助调试写入fortran中的文件

时间:2015-06-22 06:20:07

标签: fortran fortran95

我正在编写一个离散圆圈的代码,然后在用户指定的间隔内返回哪些点。使用变量x,y和theta,它将y和theta的值写入文件info.dat,但写入x为零,无论我做什么。写入points.dat也没问题。顺便说一句,所有变量都从一开始就被正确定义为可分配,目标,指针等。

open(unit=2, file="points.DAT")

print*, 'Please enter the reference angle of the arc in degrees, number of points on the arc, and radius of the arc.'
read(*,*) a, n, r
a = a * pi / 180


allocate(x(1:n),y(1:n),theta(1:n))
do i = 1,n
    theta(i:i) = a*(i-1)/n
    x(i:i) = r * cos(theta(i:i))
    y(i:i) = r * sin(theta(i:i))
    xcoord(i:i) => x(i:i)
    ycoord(i:i) => y(i:i)
    angle(i:i) => theta(i:i)        
write(2,*) 'x',i,'=',x(i:i),'y',i,'=',y(i:i), 'theta', i,'=', theta(i:i)    
end do
deallocate(x,y,theta)   
    close(2)

    open(unit=3, file="info.DAT")
print*, 'Please specify the interval of interest between 0 and 360 degrees'
read(*,*) b, c
b = b * pi / 180
c = c * pi / 180

do i = 1, n
    if (any(b <= angle(i:i) .and. angle(i:i) <= c)) then
        write(3,*) 'x', i, '=', xcoord(i:i), 'y', i, '=', ycoord(i:i), 'theta', i, '=', angle(i:i)
    end if
end do
close(3)

1 个答案:

答案 0 :(得分:0)

虽然您没有显示xcoord ycoord angle,但必须将其声明为POINTER。您将它们设置为依次指向x() y() theta()的每个单元素切片, 让它们指向第N个元素,然后释放底层数组,使指针现在未定义(指向释放的内存)。

如果你的编译器(或可能是运行时)有调试选项并使用它们,它们肯定会检测到对1..n-1的访问 而指针关联设置为(n:n),并且可能由于重新分配而检测到even(n)无效。祝你好运以前使用过的记忆 xy所摧毁,但运气不好theta和{{1}}仍有其价值。