Я работаю над большим кодом на Фортране, где части написаны на FORTRAN77.
Есть фрагмент кода, который заставляет отладчик выдавать ошибки вроде:
Fortran runtime error:
Index '2' of dimension 1 of array 'trigs' above upper bound of 1
но при компиляции без параметров отладки запускается и не вылетает программа. Используемые параметры отладки:
-g -ggdb -w -fstack-check -fbounds-check\
-fdec -fmem-report -fstack-usage
Логика проблемного фрагмента кода следующая: в файле variables.cmn
я заявляю
implicit none
integer factors,n
real*8 triggers
parameter (n=32)
common /fft/ factors(19), triggers(6*n)
Переменные factors
и triggers
инициализируются в процедуре initialize
:
include 'variables.cmn'
...
CALL FFTFAX(n,factors,triggers)
...
FFTFAX
объявлен в другой процедуре как:
SUBROUTINE FFTFAX(N,IFAX,TRIGS)
implicit real*8(a-h,o-z)
DIMENSION IFAX(13),TRIGS(1)
CALL FAX (IFAX, N, 3)
CALL FFTRIG (TRIGS, N, 3)
RETURN
END
и давайте посмотрим на процедуру FFTRIG
:
SUBROUTINE FFTRIG(TRIGS,N,MODE)
implicit real*8(a-h,o-z)
DIMENSION TRIGS(1)
PI=2.0d0*ASIN(1.0d0)
NN=N/2
DEL=(PI+PI)/dFLOAT(NN)
L=NN+NN
DO 10 I=1,L,2
ANGLE=0.5*FLOAT(I-1)*DEL
TRIGS(I)=COS(ANGLE)
TRIGS(I+1)=SIN(ANGLE)
10 CONTINUE
DEL=0.5*DEL
NH=(NN+1)/2
L=NH+NH
LA=NN+NN
DO 20 I=1,L,2
ANGLE=0.5*FLOAT(I-1)*DEL
TRIGS(LA+I)=COS(ANGLE)
TRIGS(LA+I+1)=SIN(ANGLE)
20 CONTINUE
В процедурах FFTFAX
и FFTRIG
границы измерения аргументов отличаются от фактического размера входного массива (для TRIGS
это 1 и 19 соответственно).
Я напечатал TRIGS
после вызова FFTFAX
в настройке компиляции без отладчика:
trigs: 1.0000000000000000 0.0000000000000000\
0.99144486137381038 0.13052619222005157 0.96592582628906831\
0.25881904510252074 0.92387953251128674 0.38268343236508978\
...
Мои вопросы:
- Является ли обозначение:
РАЗМЕРЫ ТРИГОВ (1)
что-то большее, чем установка границ массива?
- Почему программа работает даже в режиме без отладки?
- Установлено:
ТРИГИ ИЗМЕРЕНИЯ (*)
хорошее решение, если я хочу, чтобы переменные триги были результатом процедуры?