Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Allocazione dinamica memoria - java, Appunti di Fondamenti di informatica

Appunti università della calabria - ingegneria informatica

Tipologia: Appunti

2021/2022

In vendita dal 12/10/2019

erty89qs
erty89qs 🇮🇹

4.5

(6)

42 documenti

1 / 15

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Allocazione Dinamica della Memoria
Elisa Marengo
Universit`a degli Studi di Torino
Dipartimento di Informatica
Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Anteprima parziale del testo

Scarica Allocazione dinamica memoria - java e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

Allocazione Dinamica della Memoria

Elisa Marengo Universit`a degli Studi di Torino Dipartimento di Informatica

Scelta delle variabili

Quando scriviamo un programma e fondamentale scegliere le variabili, le strutture dati e il loro tipo in modo adeguato al problema che dobbiamo risolvere. Ad esempioe importante capire quando usare una matrice, quando usare un insieme di variabili, quando usare un array... `E importante capire anche quale tipo associare loro.

Queste decisioni dipendono dall’uso che ne vogliamo fare e dal problema che dobbiamo risolvere.

Allocazione Dinamica

Allocazione Dinamica Permette di definire variabili che possono essere create o accresciute in fase di esecuzione.

Per allocare memoria in modo dinamico si usa l’operatore new. Per liberare memoria allocata in modo dinamico si usa l’operatore delete.

Operatori new e new[ ]

Si usano per richiedere una quantita di memoria in modo dinamico. L’operatore newe seguito da un identificatore di tipo. Se e necessario allocare piu di un elemento, il numero di elementi da allocare `e indicato tra parentesi quadre. Restituisce un puntatore all’inizio del blocco di memoria allocato.

type * pointer = new type ; type * pointer = new type [ n_of_elements ];

int * pointer ; pointer = new int [5];

int * pointer ; int n ; cin > > n ; pointer = new int [ n ];

Il sistema assegna dinamicamente lo spazio per n elementi int; restituisce il puntatore al primo elemento della sequenza.

Come posso accedere agli elementi dell’array?

Con l’aritmetica dei puntatori Con la notazione a indice

pointer [0];

  • pointer ;

pointer [1]; *( pointer +1);

int * pointer ; int n ; cin > > n ; pointer = new int [ n ];

Il sistema assegna dinamicamente lo spazio per n elementi int; restituisce il puntatore al primo elemento della sequenza.

Come posso accedere agli elementi dell’array?

Con l’aritmetica dei puntatori Con la notazione a indice

pointer [0];

  • pointer ;

pointer [1]; *( pointer +1);

Fallimento dell’allocazione

La memoria dinamica e allocata in una zona di memoria detta heap. La memoriae una risorsa limitata Potrebbe finire Deve essere liberata quando non serve pi`u

Se l’allocazione fallisce: Viene lanciata un’eccezione di tipo bad alloc Un’eccezione causa il termine del programma

Esiste un modo per verificare che l’allocazione sia andata a buon fine?

int * p = new int ; if (! p ){ // allocazione fallita }

Fallimento dell’allocazione

La memoria dinamica e allocata in una zona di memoria detta heap. La memoriae una risorsa limitata Potrebbe finire Deve essere liberata quando non serve pi`u

Se l’allocazione fallisce: Viene lanciata un’eccezione di tipo bad alloc Un’eccezione causa il termine del programma

Esiste un modo per verificare che l’allocazione sia andata a buon fine?

int * p = new int ; if (! p ){ // allocazione fallita }

Errore di programmazione: perdita dei puntatori

Tenere sempre traccia della memoria dinamica utilizzata.

int x =5; int * p = new int ; p =& x ;

Come faccio ad accedere alla memoria dinamica allocata? E stata allocata una certa quantita di memoria dinamica. Tale memoria non e stata deallocata. Il puntatore a tale memoriae andato perso: memory leak. Tale memoria verra deallocata solo al termine del programma. Questo potrebbe essere un problema, ad esempio: se il programmae scritto per restare in attesa e non terminare. se si presentano molte situazioni di questo tipo la memoria potrebbe esaurirsi.

Errore di programmazione: perdita dei puntatori

Tenere sempre traccia della memoria dinamica utilizzata.

int x =5; int * p = new int ; p =& x ;

Come faccio ad accedere alla memoria dinamica allocata? E stata allocata una certa quantita di memoria dinamica. Tale memoria non e stata deallocata. Il puntatore a tale memoriae andato perso: memory leak. Tale memoria verra deallocata solo al termine del programma. Questo potrebbe essere un problema, ad esempio: se il programmae scritto per restare in attesa e non terminare. se si presentano molte situazioni di questo tipo la memoria potrebbe esaurirsi.