ご教授おねがいします.

module variables
    real(8),dimension(:,:),allocatable :: x
    integer :: i,j
end module
としてモジュールをつくり,
program main
    use variables
    implicit none
    read(*,*) i,j
    allocate( x(i,j) )
    !ここで配列xに値を代入する操作を行う
    call test()
end program
subroutine test()
    use variables
    implicit none
    !配列xに対する操作・演算を行う
end subroutine

というプログラムを実行した場合,
配列xに代入された値は,サブルーチン内から確実に参照できるのでしょうか?
(正確な値が参照できる保障はあるのでしょうか)
また,モジュール内でallocatable属性の変数を宣言し,
プログラム内で動的確保,サブルーチン等で共有することは
プログラミングの作法として許されているものなのでしょうか?
なお,コンパイラはCompaq Visual Fortran 6.1を使用しています.
よろしくお願いします.