A idéia da alocação dinâmica de memória é simplesmente a de ser possível a utilização de um array sem ser necessário declararmos o tamanho desse array no início do programa junto à declaração de variáveis. Inicialmente, como já fizemos em um exemplo anterior, o tamanho do array era declarado no início do programa como no programa do cálculo do centro de massa. A declaração tinha a seguinte forma:
Da maneira como está declarado acima, as variáveis indexadas , , e terão tamanho fixo igual a 5. O propósito desta seção é fazer com que o tamanho seja dessas variáveis indexadas seja atribuído a partir de um arquivo externo e também que possa alterar de tamanho durante a execução do programa sem a necessidade de uma segunda compilação.
Para utilizarmos a alocação dinâmica de memória, ou seja, atribuir um tamanho para um array, precisamos dizer para o compilador que esta operação será realizada. Isto é feito no momento em que se declara uma variável:
Em conjunto com esta declaração de variáveis, o aray deve possuir um tamanho a ser informado poteriorment. O tamanho desse array irá depender do problema a ser resolvido e também do tamanho da memória RAM do computador. A variável que indica o tamanho do array poderá ser lido a partir de um arquivo ou a partir do teclado. Uma vez que temos o tamanho desse array é necessário dizer ao compilador que o array terá um tamanho . No programa isto será feito da seguinte forma:
A variável indica o tamanho do array e deve possuir algum valor antes da declaração allocate. As variáveis err_x, err_y, err_z e err_m são variáveis inteiras associadas à alocação das variáveis, no processo de alocação se essas variáveis retornarem 0 (zero) significa que elas foram alocadas com sucesso ou se retornarem qualquer valor diferente de zero significa que houve algum problema com a alocação do array. Para exemplificar faremos o programa abaixo:
! ! PROGRAMA PARA EXEMPLIFICAR A ALOCACAO DINAMICA DE MEMORIA ! program allocdyn implicit none real(kind=4), allocatable, dimension(:) :: x, y integer :: i, n, err_x, err_y ! err_x=0; err_y=0 ! write(*,*)'Digite o tamanho do seu array (numero inteiro):' read(*,*) n ! allocate(x(n),stat=err_x) allocate(y(n),stat=err_y) ! if( err_x /= 0 ) then write(*,*)'Problema para allocar o vetor x! Saindo!!!' stop end if if( err_y /= 0 ) then write(*,*)'Problema para allocar o vetor y! Saindo!!!' stop end if ! do i=1, n x(i) = 2.0 y(i) = 0.0 end do do i=1, n if ( i == 1 ) then y(i) = x(i) else y(i) = y(i-1) + 1.0 end if end do ! do i=1, n write(*,1000) i,x(i),y(i) end do ! deallocate(x) deallocate(y) ! 1000 format(i6,f10.3,f10.3) ! stop end program allocdyn !