Menu
Coddy logo textTech

Zwalnianie pamięci za pomocą „delete”

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 7 z 56.

Gdy dynamicznie przydzielasz pamięć za pomocą new, nie znika ona automatycznie, gdy przestajesz jej używać. W przeciwieństwie do zwykłych zmiennych, które są automatycznie usuwane, dynamicznie przydzielona pamięć pozostaje zajęta, dopóki jawnie jej nie zwolnisz. Właśnie dlatego słowo kluczowe delete jest niezbędne.

Słowo kluczowe delete zwalnia pamięć, która została wcześniej przydzielona za pomocą new. Używając delete, informujesz system, że nie potrzebujesz już tej pamięci i można ją ponownie wykorzystać do innych celów:

int* ptr = new int(42);  // Przydziel pamięć
// Użyj pamięci...
delete ptr;              // Zwolnij pamięć

Podstawowa zasada dynamicznego zarządzania pamięcią jest prosta: do każdego new musi być przypisane odpowiadające mu delete. Jeśli zapomnisz zwolnić dynamicznie przydzieloną pamięć, spowodujesz wyciek pamięci — program nadal będzie zajmował pamięć, której już nie używa, co może w końcu doprowadzić do wyczerpania dostępnej pamięci w systemie.

Po wywołaniu delete na wskaźniku staje się on nieprawidłowy i nie należy go ponownie używać. Dobrą praktyką jest ustawienie wskaźnika na nullptr po usunięciu, aby uniknąć przypadkowego użycia go.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który demonstruje pełny cykl życia pamięci dynamicznej: przydziel pamięć za pomocą new, użyj jej, a następnie prawidłowo zwolnij za pomocą delete.

Podane zostaną następujące dane wejściowe:

  • Wartość całkowita do zapisania w pamięci przydzielonej dynamicznie
  • Druga wartość całkowita, która zaktualizuje zapisaną wartość

Twój program powinien:

  1. Użyć new, aby dynamicznie przydzielić pamięć na liczbę całkowitą i zapisać wskaźnik w zmiennej o nazwie dynamicPtr
  2. Przypisać pierwszą wartość wejściową do przydzielonej dynamicznie pamięci za pomocą operatora dereferencji
  3. Wypisać początkową wartość zapisaną w przydzielonej dynamicznie pamięci
  4. Zaktualizować wartość w przydzielonej dynamicznie pamięci, przypisując jej drugą wartość wejściową
  5. Wypisać zaktualizowaną wartość
  6. Użyć delete, aby zwolnić przydzieloną dynamicznie pamięć
  7. Po usunięciu ustawić wskaźnik na nullptr
  8. Wypisać komunikat potwierdzający zwolnienie pamięci

Użyj dokładnie następującego formatu wyjściowego:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

Spróbuj swoich sił

#include <iostream>
using namespace std;

int main() {
    // Wczytaj wartości wejściowe
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO: Napisz swój kod poniżej
    // 1. Przydziel pamięć za pomocą new i zapisz jej adres w dynamicPtr
    // 2. Przypisz firstValue do przydzielonej pamięci
    // 3. Wyświetl wartość początkową
    // 4. Zaktualizuj wartość za pomocą secondValue
    // 5. Wyświetl zaktualizowaną wartość
    // 6. Zwolnij pamięć i ustaw wskaźnik na nullptr
    // 7. Wyświetl komunikat potwierdzający
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator C++ online