Page 680 - Informatica dalla A a Z
P. 680
return 0;
}
Se nessuno dei costrutti catch dovesse catturare l’esecuzione rispetto al tipo passato come
argomento dal throw, allora verrebbe eseguito il blocco con i puntini sospensivi.
È possibile gestire anche delle “Eccezioni standard”, attraverso una specifica classe della
libreria standard.
#include <exception>
Esempio:
try
{
// codice
}
catch (const std::exception& e)
{
// Gestione eccezione e
}
Allocazione dinamica della memoria
La memoria è una risorsa fisica della macchina e, come tale, ha una sua dimensione che,
per quanto grande possa essere, è pur sempre limitata.
Nel C quando si dichiara un array siamo costretti a definire a priori una dimensione per la
struttura dati, in quanto il compilatore deve sapere esattamente quanta memoria allocare
per una specifica variabile. Qualche volta questo potrebbe rappresentare un ostacolo.
Lo stesso problema si presenta anche con l’uso di variabili di tipo semplice. Le variabili,
infatti, vivono per un tempo di esecuzione relativo al blocco di codice nel quale sono di-
chiarate e alla fine del blocco, diventano inaccessibili.
Le variabili vengono memorizzate in un’area di memoria riservata al programma detta
stack, che una volta saturata (overflow dello stack) non può più essere utilizzata.
L’ideale sarebbe invece una situazione in cui poter dichiarare e utilizzare di volta in volta
solo lo spazio di cui abbiamo bisogno in un dato momento. Ciò è possibile grazie a una
seconda area di memoria dedicata all’allocazione dinamica della memoria, la memoria
heap.
Test: Quale tra i seguenti array non è compatibile con la memorizzazione di un min-heap i
cui elementi hanno valori 5, 7, 2, 3, 1, 8, 6? [1, 2, 6, 3, 5, 7, 8] [1, 6, 2, 3, 7, 5, 8] [1, 6, 2, 7,
8, 3, 5] [1, 5, 2, 7, 8, 6, 3]
[1, 6, 2, 3, 7, 5, 8]
Abbiamo quindi bisogno di un meccanismo che consenta di richiedere al sistema l’esatta
quantità di memoria usata per una certa operazione e di un analogo meccanismo per rila-
sciare al sistema la memoria quando non più necessaria.
676