|
|
|
![]() |
|
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 09: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: 21:55.