Come eliminare un array bidimensionale in C ++

Come eliminare un array bidimensionale in C ++
Un array 2D può essere creato in due modi: usando la memoria normale o utilizzando il negozio gratuito. Quando un programma è in esecuzione, ha la sua normale porzione di memoria e memoria extra da utilizzare. Il programma non è obbligato a utilizzare la memoria extra chiamata Free Store. Il programma creerebbe un normale array 2D nella memoria normale. Se il programma deve creare lo stesso array 2D nel negozio gratuito, allora dovrebbe farlo in modo dinamico. Le sintassi per creare l'array bidimensionale in entrambi i tipi di memoria, sono diverse. Per eliminare un normale array 2D, lascialo andare fuori portata. Per eliminare un array 2D, creato in negozio gratuito, utilizzare l'operatore Elimina [] in modo appropriato.

Creazione di un normale array 2D

La seguente dichiarazione, crea un normale array 2D:

String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"BA", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Se questo array viene creato nell'ambito globale, non può essere utilizzato (E.G. riassegnato un valore dell'elemento) nell'ambito globale. Tuttavia, può avere uno qualsiasi dei suoi elementi riassegnati a un valore negli altri ambiti.

Per eliminare questo array, lascialo andare fuori dalla portata. Se fosse stato creato in un ambito diverso dall'ambito globale, sarebbe uscito dalla portata alla fine del suo blocco (). Se fosse stato creato nell'ambito globale, sarebbe passato solo dall'ambito alla fine del programma.

Array 2D di negozio gratuito

La seguente dichiarazione mostra come l'array sopra ma con un nome puntatore diverso può essere creato dinamicamente nel negozio gratuito:

String (*ptr2d) [5] = new String [5] [5] "aa", "ab", "ac", "ad", "ae",
"BA", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Nota come è stato creato l'array 2D con il nuovo operatore. Il nome dell'array, è ptr2d.

Se questo array viene creato nell'ambito globale, non può essere utilizzato (E.G. riassegnato un valore dell'elemento) nell'ambito globale. Tuttavia, può avere uno qualsiasi dei suoi elementi, ha riassegnato un valore negli altri ambiti.

Per eliminare questo array, utilizzare l'operatore Elimina [], come mostrato di seguito. L'array nel negozio gratuito non può essere davvero eliminato lasciandolo uscire dall'ambito. Deve essere eliminato con l'operatore Elimina [], nel suo ambito, al fine di liberare la memoria.

Contenuto dell'articolo

- Introduzione - Vedi sopra

- Eliminazione di un array ordinario 2D

- Eliminazione di un puntatore 2D creato dinamicamente di negozio gratuito

- Conclusione

Eliminazione di un array ordinario 2D

Un array ordinario bidimensionale viene eliminato semplicemente lasciandolo uscire dall'ambito. Il seguente programma lo illustra con un ambito nidificato:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

if (1 == 1)
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"BA", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <restituzione 0;

L'output è, BB. Il costrutto if ha un blocco che è l'ambito nidificato. L'array smette di esistere alla fine del blocco. C'è un indicatore di commenti, appena sotto il blocco, nel programma. Se viene rimosso, il programma non si compilerà e verrà emesso un messaggio di errore. Ciò risulta dal fatto che l'array 2D è morto alla fine del blocco.

Nel seguente programma, l'array 2D ordinario dichiarato nel corpo della funzione, muore alla fine del blocco della funzione:

#includere
Utilizzo dello spazio dei nomi std;
void fn ()
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"BA", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <int main ()

fn ();
restituzione 0;

L'output è ancora, BB. C'è un indicatore di commenti appena sotto il blocco funzione nel programma. Se viene rimosso, il programma non si compilerà e verrà emesso un messaggio di errore. Ciò risulta dal fatto che l'array 2D è morto alla fine del blocco. Ricordiamo inoltre che, l'assegnazione di un valore a un elemento 2D, dopo la dichiarazione, non è consentita nell'ambito globale.

Eliminazione di un puntatore 2D creato dinamicamente di negozio gratuito

L'assegnazione dopo la dichiarazione non è consentita nell'ambito globale. Quindi, è conveniente avere una dichiarazione di array 2D, in un ambito nidificato, nella funzione principale C ++, per motivi pedagogici.

Un array bidimensionale, dichiarato nella forma sopra, viene eliminato con la sintassi, "Elimina [] 2Darray". Questa cancellazione deve avvenire nel suo ambito per liberare la memoria ed evitare la perdita di memoria. Il seguente programma lo illustra, con un ambito nidificato:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

if (1 == 1)
String (*ptr2d) [5] = new String [5] [5] "aa", "ab", "ac", "ad", "ae",
"BA", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< ptr2D[0][0] <delete [] ptr2d;
cout<< ptr2D[0][0] <
restituzione 0;

L'output è, AA, da PTR2D [0] [0]. Dopo la cancellazione, ptr2d [0] [0] non restituisce nulla. Sebbene gli altri elementi come PTR2D [1] [1] restituirebbero comunque un valore, l'array è considerato eliminato.

2D Array Store gratuito come puntatore a pointer

Un array 2D può essere creato come puntatore a pointer. In questo caso, tutte le righe dovranno essere eliminate prima che l'array unidimensionale rimanga, viene eliminato. Il seguente programma lo illustra nella funzione principale C ++:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

stringa ** ptr2d = new string*[3]; // NO delle righe
ptr2d [0] = new string [5];
ptr2d [0] [0] = "aa"; ptr2d [0] [1] = "AB"; PTR2D [0] [2] = "AC"; ptr2d [0] [3] = "ad";
ptr2d [1] = new string [5];
PTR2D [1] [0] = "BA"; PTR2D [1] [1] = "BB"; PTR2D [1] [2] = "BC"; ptr2d [1] [3] = "bd";
ptr2d [2] = new string [5];
PTR2D [2] [0] = "CA"; PTR2D [2] [1] = "CB"; ptr2d [2] [2] = "cc"; ptr2d [2] [3] = "cd";
cout<< ptr2D[1][1] <// libera ogni sotto-array (riga)
per (int i = 0; i< 3; ++i)
delete [] ptr2d [i];

delete [] ptr2d; // libera la serie di suggerimenti
cout<< ptr2D[1][1] <restituzione 0;

L'output è BB prima di eliminare. Dopo l'eliminazione, il valore di ritorno da PTR2D [1] [1] non è nulla.

Ora, questo array 2D di puntatore in negozio gratuito è un array monodimensionale puntatore, di array di punta. Quindi, al fine di eliminare l'array 2D in negozio gratuito, tutte le righe devono essere eliminate per prime con elimina [] prima che l'array di punta unidimensionale principale venga eliminato. Questo utilizza lo schema operatore ELETE [] per un array 2D in negozio gratuito.

Inclusione della biblioteca

Il nuovo operatore e eliminazione, sono effettivamente definiti nella libreria. Tuttavia, inclusa questa libreria è facoltativa.

Conclusione

Per eliminare un array ordinario 2D, lascialo andare fuori dalla portata. Se l'array 2D è in negozio gratuito, deve essere eliminato con l'operatore Elimina [] per la memoria libera nell'ambito in cui è dichiarato. Se l'array 2D in Store gratuito fosse stato creato con una sintassi convenzionale, allora un semplice "Elimina [] 2DarrayName" farebbe per la cancellazione. Se è stato creato come puntatore a pointer, le righe dovranno essere eliminate prima con "Elimina [] 2DarrayName [i]" e quindi l'array 1D rimanente (senza elementi), essere eliminati con "Elimina [] 2DarrayName ".