Почему при явной записи за пределами массива нет ошибки времени выполнения?

У меня есть программа, которая присваивает значение массиву за его пределами, и я ожидал, что будет выдана ошибка времени выполнения. При этом никакой ошибки не возникает, и программа продолжает запись в необъявленную память. Есть ли какой-то вариант компилятора для защиты от этого? С показанным дампом памяти становится ясно, что это превышение границ реально. Есть ли способ объявить переменные или спецификации аргументов, чтобы поймать это? Очевидно, это очевидный случай, но когда мне поручают поддерживать тысячи строк кода, производного от F77, не всегда ясно (мне), может ли это происходить.

PROGRAM TEST_CODE
IMPLICIT NONE

INTEGER*4 :: R(5)           ! Array of 5

    CALL R_TEST(R, 10)

END PROGRAM

SUBROUTINE R_TEST(R, J)
IMPLICIT NONE

INTEGER*4, INTENT(INOUT) :: R(1)    ! Dummy is array of 1
INTEGER*4, INTENT(IN) :: J
INTEGER*4 :: K

DO K=J-5,J+5            ! K=5..15
    R(K) = K            ! No Runtime Error
END DO

END SUBROUTINE

Компилятором является Intel Fortran 2011 XE, и да, я использую байтовую спецификацию INTEGER*4, потому что знаю, что с ней получаю.

Вот параметры компилятора для проверки во время выполнения. Compiler Options

Memory of <code>R</code> variable

6
задан ja72 23 March 2012 в 14:12
поделиться