|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
[c++] Gestione della Memoria!
Ciao a tutti!
Vorrei sottoporvi un caso immagino molto semplice, ma non riesco a trovare un modo poco complicato per risolvere la cosa. Supponiamo di avere questo ordinario spezzone di codice: Codice:
int main(){
int **griglia = 0;
int lato = 0;
cin >> lato;
griglia = new int*[lato*lato];
..
..
delete[] griglia;
return 0;
}
In effetti con g++ mi vedo ritornare un eccezione di tipo bad_alloc che non so come gestire: vorrei che il programma non si fermasse ma cancellasse quanto allocato e riproponesse l'inserimento della dimensione fin tanto che l'operazione non va a buon fine. Come posso fare? Chiedo troppo?
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
Quote:
Codice:
int main(){
int **griglia = 0;
int lato = 0;
cin >> lato;
try {
griglia = new int*[lato*lato];
} catch(bad_alloc x) {
// gestisci qui l'errore di allocazione
}
..
..
delete[] griglia;
return 0;
}
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Grazie molto rapido e chiaramente funziona
.. Edit...
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
..un'ultima cosa, come posso gestire l'errore in modo che mi cicli l'istruzione di inserimento della dimensione?
Una cosa del tipo: Codice:
...
do {
cin >>lato;
try{
griglia= new...
}
catch{...}
} while (errore);
...
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
while (1)
{
cin >> lato;
try {
griglia = new int*[lato*lato];
break; // Esci dal loop
} catch(bad_alloc x) {} // Niente
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 07-12-2005 alle 10:02. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Grazie mi ero intestardito sull'idea di utilizzare l'errore come argomento del ciclo, quando in effetti potevo impostare il loop in tutt'altra maniera..Poca esperienza non c'è che dire.
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:21.



















