Menu
Coddy logo textTech

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 zu

In 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.

challenge icon

Aufgabe

Einfach

Erstellen 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:

  1. Das Schlüsselwort new verwenden, um dynamisch Speicher für einen Integer zuzuweisen
  2. Den von new zurückgegebenen Zeiger in einer Zeigervariablen namens numPtr speichern
  3. Den Dereferenzierungsoperator verwenden, um den Eingabewert dem dynamisch zugewiesenen Speicher zuzuweisen
  4. Den im dynamisch zugewiesenen Speicher gespeicherten Wert durch Dereferenzierung des Zeigers ausgeben
  5. 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 zu

Im 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;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf