Dynamischer Speicher mit 'new'
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 6 von 56.
Bisher haben Sie mit Pointern gearbeitet, die auf Variablen zeigen, die bereits in Ihrem Programm erstellt wurden. Aber was ist, wenn Sie Variablen erstellen müssen, während Ihr Programm läuft? Hier wird die dynamische Speicherzuweisung mit dem Schlüsselwort new unverzichtbar.
Das Schlüsselwort new ermöglicht es Ihnen, während der Programmausführung Speicher für eine Variable auf dem Heap zu reservieren. Im Gegensatz zu regulären Variablen, die auf dem Stack erstellt werden, bleibt dynamisch allozierter Speicher bestehen, bis Sie ihn explizit freigeben.
int* ptr = new int; // Reserviert Speicher für eine Ganzzahl
*ptr = 42; // Weist dem reservierten Speicher einen Wert zuIn diesem Beispiel belegt new int genügend Speicher, um eine Ganzzahl zu speichern, und gibt einen Zeiger auf diesen Speicherort zurück. Sie können dann den Dereferenzierungsoperator verwenden, um Werte zuzuweisen und auf die dynamisch zugewiesene Variable zuzugreifen, genau wie bei jedem anderen Zeiger.
Dynamische Speicherzuweisung ist besonders nützlich, wenn Sie erst zur Laufzeit wissen, wie viel Speicher Sie benötigen, oder wenn Variablen über den Gültigkeitsbereich hinaus existieren müssen, in dem sie erstellt wurden. Diese Flexibilität macht new zu einem leistungsstarken Werkzeug für die Erstellung komplexerer Programme.
Aufgabe
EinfachErstellen Sie ein Programm, das die dynamische Speicherzuweisung unter Verwendung des Schlüsselworts new demonstriert, um während der Programmausführung Speicher für eine Variable zuzuweisen.
Die folgende Eingabe wird bereitgestellt:
- Ein Ganzzahlwert (Integer), der im dynamisch zugewiesenen Speicher gespeichert werden soll
Ihr Programm sollte:
- Das Schlüsselwort
newverwenden, um dynamisch Speicher für einen Integer zuzuweisen - Den von
newzurückgegebenen Zeiger in einer Zeigervariablen namensnumPtrspeichern - Den Dereferenzierungsoperator verwenden, um den Eingabewert dem dynamisch zugewiesenen Speicher zuzuweisen
- Den im dynamisch zugewiesenen Speicher gespeicherten Wert durch Dereferenzierung des Zeigers ausgeben
- Die im Zeiger gespeicherte Speicheradresse ausgeben
Verwenden Sie das folgende exakte Ausgabeformat:
Value: [value]
Address: [memory address]Die Speicheradresse wird im Hexadezimalformat angezeigt, so wie C++ Speicheradressen für dynamisch zugewiesenen Speicher darstellt.
Spickzettel
Das Schlüsselwort new reserviert während der Programmausführung Speicher für eine Variable auf dem Heap:
int* ptr = new int; // Reserviert Speicher für eine Ganzzahl
*ptr = 42; // Weist dem reservierten Speicher einen Wert zuIm Gegensatz zu regulären Variablen, die auf dem Stack erstellt werden, bleibt dynamisch reservierter Speicher bestehen, bis er explizit freigegeben wird, und kann über den Gültigkeitsbereich hinaus existieren, in dem er erstellt wurde.
Probier es selbst
#include <iostream>
using namespace std;
int main() {
// Eingabe lesen
int value;
cin >> value;
// TODO: Schreibe deinen Code unten
// Verwende 'new', um dynamisch Speicher für einen Integer zu reservieren
// Speichere den Zeiger in einer Variable namens 'numPtr'
// Weise den Eingabewert dem dynamisch reservierten Speicher zu
// Ergebnis ausgeben
cout << "Value: " << /* numPtr hier dereferenzieren */ << endl;
cout << "Address: " << /* die in numPtr gespeicherte Adresse ausgeben */ << endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen