25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

368 Puntatori<br />

...<br />

NULLIFY(pt1) ! pt1 deassociato<br />

test = ASSOCIATED(pt1) ! .F. (pt1 è stato deassociato)<br />

test = ASSOCIATED(pt1,pt2) ! .F. (pt1 non è associato a pt2)<br />

test = ASSOCIATED(pt2,TARGET=t2) ! .T. (pt2 è associato a t2)<br />

test = ASSOCIATED(pt2,TARGET=t1) ! .F. (pt2 non è associato a t1)<br />

NULLIFY(pt1,pt2) ! pt1 e pt2 deassociati<br />

7.4 Allocazione dinamica della memoria con i puntatori<br />

Oltre che ad una variabile dichiarata con attributo TARGET o POINTER, un puntatore può anche<br />

essere associato a blocchi di memoria dinamica. Questa memoria viene allocata attraverso<br />

l’istruzione ALLOCATE la quale crea una variabile o un array (di dimensioni specificate) senza<br />

nome e avente il tipo ed il rango del puntatore. Dualmente, l’istruzione DEALLOCATE ha lo scopo<br />

di rimuovere la precedente allocazione.<br />

La forma generale delle istruzioni ALLOCATE e DEALLOCATE è identica a quelle dell corrispondenti<br />

istruzioni valide per gli allocatable array:<br />

ALLOCATE(puntatore(dim) [, STAT=stato])<br />

DEALLOCATE(puntatore [, STAT=stato])<br />

in cui puntatore è il nome di un puntatore alla variabile o all’array che si sta creando, dim<br />

è la specificazione delle dimensioni nel caso in cui l’oggetto che si sta creando sia un array, e<br />

stato è una variabile intera avente valore zero in caso di operazione terminata con successo,<br />

positivo (e dipendente dal processore) in caso contrario. La clausola STAT= è opzionale ma il<br />

suo utilizzo è sempre da preferirsi al fine di evitare un eventuale arresto del programma in caso<br />

di errore. Un esempio servirà a chiarire le definizioni precedenti:<br />

REAL, POINTER :: pv, pa(:)<br />

INTEGER :: stato, n=100<br />

...<br />

ALLOCATE(pv,pa(n),STAT=stato)<br />

IF (stato==0) THEN<br />

...<br />

END IF<br />

...<br />

DEALLOCATE(pv,pa,STAT=stato)<br />

IF (stato==0) THEN<br />

...<br />

END IF<br />

Nell’esempio in esame, la variabile pv punta ad un’area di memoria dinamica che può contenere<br />

un singolo valore reale, mentre la variabile pa punta ad un blocco di memoria dinamica di<br />

dimensioni tali da poter contenere 100 valori reali. Quando la suddetta area di memoria non

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!