Нужна помощь в отладке записи в файл на фортране
Я пишу код, который дискретизирует круг, а затем возвращает, какие точки будут в интервале, указанном пользователем. Используя переменные 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 ответ
Хотя ты не показываешь это xcoord ycoord angle
должен быть объявлен как POINTER
, Вы устанавливаете их так, чтобы они указывали на каждый отдельный элемент x() y() theta()
в свою очередь, оставьте их указывающими на N-ые элементы, а затем освободите базовые массивы, чтобы указатели теперь не были определены (указывают на освобожденную память).
Если у вас есть параметры отладки на вашем компиляторе (или, возможно, во время выполнения) и вы используете их, они обязательно должны определить доступ к 1..n-1, в то время как указатель связи установлен на (n:n), и могут обнаружить это даже (n) недействителен из-за освобождения. По счастливой случайности память, ранее использовавшаяся x
был забит чем-то еще, но неудачей y
а также theta
все еще имеют свои ценности.