So löschen Sie ein zweidimensionales Array in C ++

So löschen Sie ein zweidimensionales Array in C ++
Ein 2D -Array kann auf zwei Arten erstellt werden: Verwenden des normalen Speichers oder Verwendung des kostenlosen Speichers. Wenn ein Programm ausgeführt wird, hat es seinen normalen Teil des Speichers und des zusätzlichen Speichers zu verwenden. Das Programm ist nicht verpflichtet, den zusätzlichen Speicher mit dem Namen Free Store zu verwenden. Das Programm würde ein gewöhnliches 2D -Array im normalen Speicher erstellen. Wenn das Programm das gleiche 2D -Array im kostenlosen Geschäft erstellen soll, müsste es dies dynamisch tun. Die Syntaxe, um das zweidimensionale Array in beiden Arten des Speichers zu erstellen, sind unterschiedlich. Um ein gewöhnliches 2D -Array gelöscht zu haben, lassen Sie es einfach aus dem Spielraum gehen. Verwenden Sie zum Löschen eines 2D -Arrays, das im kostenlosen Geschäft erstellt wurde.

Erstellen eines gewöhnlichen 2D -Arrays

Die folgende Erklärung erstellt ein gewöhnliches 2D -Array:

String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "Bb", "BC", "Bd", "sei",
"Ca", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Wenn dieses Array im globalen Bereich erstellt wird, kann es nicht verwendet werden (e.G. einen Elementwert neu zugewiesen) im globalen Umfang. Es kann jedoch sein, dass eines seiner Elemente einen Wert in den anderen Teilen neu zuordnet.

Um dieses Array gelöscht zu haben, lassen Sie es einfach aus dem Zielfernrohr gehen. Wenn es in einem anderen Umfang als dem globalen Bereich erstellt würde, würde es am Ende seines Blocks () aus dem Zielfernrohr ausgehen (). Wenn es im globalen Bereich erstellt würde, würde es am Ende des Programms nur aus dem Zielfernrohr gehen.

Kostenloser Store 2D -Array

Die folgende Anweisung zeigt, wie das obige Array jedoch mit einem anderen Zeigernamen im kostenlosen Laden dynamisch erstellt werden kann:

String (*ptr2d) [5] = neuer String [5] [5] "aa", "ab", "ac", "ad", "ae",
"Ba", "Bb", "BC", "Bd", "sei",
"Ca", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Beachten Sie, wie das 2D -Array mit dem neuen Bediener erstellt wurde. Der Name des Arrays ist ptr2d.

Wenn dieses Array im globalen Bereich erstellt wird, kann es nicht verwendet werden (e.G. einen Elementwert neu zugewiesen) im globalen Umfang. Es kann jedoch eines seiner Elemente haben und einen Wert in den anderen Teilen neu zuordnen.

Verwenden Sie, um dieses Array zu löschen, den Operator Löschen [], wie unten gezeigt. Das Array in Free Store kann nicht wirklich gelöscht werden, indem es aus dem Zielfernrohr geht. Es muss mit dem Delete [] -Operator in seinem Geltungsbereich gelöscht werden, um den freien Speicher frei zu machen.

Artikelinhalt

- Einführung - siehe oben

- Löschen eines 2D -gewöhnlichen Arrays

- Dynamisch erstelltes 2D -Zeiger -Array von kostenlosen Laden löschen

- Abschluss

Löschen eines 2D -gewöhnlichen Arrays

Ein zweidimensionales gewöhnliches Array wird gelöscht, indem es einfach aus dem Zielfernrohr gehen lässt. Das folgende Programm zeigt dies mit einem verschachtelten Bereich:

#enthalten
Verwenden von Namespace STD;
int main ()

if (1 == 1)
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "Bb", "BC", "Bd", "sei",
"Ca", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
Cout<< arr2D[1][1] <
// Cout<< arr2D[1][1] <Rückkehr 0;

Der Ausgang ist BB. Das If-Construct hat einen Block, der den verschachtelten Bereich ist. Das Array hört auf, am Ende des Blocks vorhanden zu sein. Es gibt einen Kommentarindikator, direkt unter dem Block, im Programm. Wenn es entfernt wird, wird das Programm nicht kompiliert und eine Fehlermeldung wird ausgegeben. Dies ergibt sich aus der Tatsache, dass das 2D -Array am Ende des Blocks tot ist.

Im folgenden Programm stirbt das gewöhnliche 2D -Array, das in der Funktionsbehörde deklariert ist, am Ende des Funktionsblocks:

#enthalten
Verwenden von Namespace STD;
void fn ()
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "Bb", "BC", "Bd", "sei",
"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 ();
Rückkehr 0;

Die Ausgabe ist still, BB. Es gibt einen Kommentarindikator direkt unter dem Funktionsblock im Programm. Wenn es entfernt wird, wird das Programm nicht kompiliert und eine Fehlermeldung wird ausgegeben. Dies ergibt sich aus der Tatsache, dass das 2D -Array am Ende des Blocks tot ist. Erinnern Sie sich auch daran, dass die Zuordnung eines Wertes zu einem 2D -Element nach der Erklärung im globalen Bereich nicht zulässig ist.

Dynamisch erstelltes 2D -Zeiger -Array von kostenlosen Laden löschen

Die Aufgabe nach der Erklärung ist im globalen Bereich nicht zulässig. Es ist also bequem, eine 2D -Array -Erklärung in einem verschachtelten Bereich in der C ++ - Hauptfunktion aus pädagogischen Gründen zu erhalten.

Ein zweidimensionales Array, das in der obigen Form deklariert ist, wird mit der Syntax "Löschen [] 2darray" gelöscht. Diese Löschung muss in ihrem Bereich auf freien Speicher und zur Vermeidung von Speicherleckagen erfolgen. Das folgende Programm zeigt dies mit einem verschachtelten Bereich:

#enthalten
Verwenden von Namespace STD;
int main ()

if (1 == 1)
String (*ptr2d) [5] = neuer String [5] [5] "aa", "ab", "ac", "ad", "ae",
"Ba", "Bb", "BC", "Bd", "sei",
"Ca", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
Cout<< ptr2D[0][0] <löschen [] ptr2d;
Cout<< ptr2D[0][0] <
Rückkehr 0;

Die Ausgabe ist AA von PTR2D [0] [0]. Nach dem Löschen gibt PTR2D [0] [0] nichts zurück. Obwohl die anderen Elemente wie PTR2D [1] [1] noch einen Wert zurückgeben würden, wird das Array als gelöscht angesehen.

2D kostenloser Store-Array als Zeiger-auf-Zeiger

Ein 2D-Array kann als Zeiger-zu-Zeiger erstellt werden. In diesem Fall müssen alle Zeilen zuerst gelöscht werden, bevor das eindimensionale Array verbleiben wird. Das folgende Programm zeigt dies in der C ++ - Hauptfunktion:

#enthalten
Verwenden von Namespace STD;
int main ()

String ** ptr2d = neuer String*[3]; // Nein von Reihen
ptr2d [0] = neuer String [5];
ptr2d [0] [0] = "aa"; ptr2d [0] [1] = "ab"; ptr2d [0] [2] = "ac"; ptr2d [0] [3] = "ad";
ptr2d [1] = neuer String [5];
ptr2d [1] [0] = "ba"; ptr2d [1] [1] = "BB"; ptr2d [1] [2] = "BC"; ptr2d [1] [3] = "Bd";
ptr2d [2] = neuer String [5];
ptr2d [2] [0] = "ca"; ptr2d [2] [1] = "cb"; ptr2d [2] [2] = "CC"; ptr2d [2] [3] = "CD";
Cout<< ptr2D[1][1] <// Jede Sub-Array (Zeile) freigeben
für (int i = 0; i< 3; ++i)
löschen [] ptr2d [i];

löschen [] ptr2d; // freie Zeigerfreie befreien
Cout<< ptr2D[1][1] <Rückkehr 0;

Der Ausgang ist BB vor dem Löschen. Nach dem Löschen ist der Rückgabewert von PTR2D [1] [1] nichts.

Jetzt ist dieses Zeiger 2D -Array im kostenlosen Laden ein Zeiger ein dimensionales Array von Zeiger -Arrays. Um das 2D-Array in Free Store zu löschen, müssen alle Zeilen zuerst mit Löschen [] gelöscht werden. Dadurch wird das Schema für ein 2D -Array im kostenlosen Laden gelöscht [].

Einbeziehung der Bibliothek

Der neue und löschende Betreiber ist tatsächlich in der Bibliothek definiert. Die Einbeziehung dieser Bibliothek ist jedoch optional.

Abschluss

Um ein 2D -gewöhnlicher Array zu löschen, lassen Sie es einfach aus dem Zielfernropp. Wenn sich das 2D -Array im kostenlosen Speicher befindet, muss es mit dem löschlichen [] -Operator in dem Zielfernrohr, in dem es deklariert wird, gelöscht werden. Wenn das 2D -Array in Free Store mit einer herkömmlichen Syntax erstellt würde, würde ein einfacher "Delete [] 2DarrayName" für das Löschen von Löschen erfolgen. Wenn es als Zeiger-zu-Zeiger erstellt wurde, müssen die Zeilen zuerst mit "Delete [] 2DarrayName [i] gelöscht werden und dann das verbleibende 1D-Array (ohne Elemente) mit" Delete [] gelöscht werden [] 2DarrayName ”.