que tienen el siguiente programalímites de matriz teniendo en FORTRAN durante la llamada a subrutina
module test
contains
subroutine foo()
integer, allocatable :: a(:)
allocate(a(-5:5))
call bar(a)
print *, a
end subroutine
subroutine bar(a)
integer, intent(out) :: a(:)
a = 0
a(-4) = 3 ! here
a(2) = 3
end subroutine
end module
program x
use test
call foo()
end program
En la línea marcada con "aquí" que estoy haciendo algo mal. El hecho es que cuando recibo el arreglo a
(en la persona que llama asignada de -5 a +5), el destinatario usa la numeración convencional (1 a n), lo que significa que asignando -4 estoy haciendo una asignación fuera del límite. ¿Cómo puedo indicar al compilador que, dentro de la rutina bar
, la numeración de la matriz a
debe ser la misma que en la persona que llama?
¿Qué sucede si no conozco el índice inicial en el momento de la compilación? –
@Stefano: ver M. S. B. respuesta. Necesita que el límite inferior sea el segundo argumento de su subrutina de barra. – Wildcat
¿Entonces la declaración 'entero, intención (salida) :: a (lbound (a) :)' no es válida? (No lo he intentado, tal vez debería). No me gusta pasar detalles sobre mi matriz como argumento. –