我正在编写一个离散圆圈的代码,然后在用户指定的间隔内返回哪些点。使用变量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)
答案 0 :(得分:0)
虽然您没有显示xcoord ycoord angle
,但必须将其声明为POINTER
。您将它们设置为依次指向x() y() theta()
的每个单元素切片,
让它们指向第N个元素,然后释放底层数组,使指针现在未定义(指向释放的内存)。
如果你的编译器(或可能是运行时)有调试选项并使用它们,它们肯定会检测到对1..n-1的访问
而指针关联设置为(n:n),并且可能由于重新分配而检测到even(n)无效。祝你好运以前使用过的记忆
x
被y
所摧毁,但运气不好theta
和{{1}}仍有其价值。