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.
Wyzwanie
ŁatwyUtwó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:
- Użyć
new, aby dynamicznie przydzielić pamięć na liczbę całkowitą i zapisać wskaźnik w zmiennej o nazwiedynamicPtr - Przypisać pierwszą wartość wejściową do przydzielonej dynamicznie pamięci za pomocą operatora dereferencji
- Wypisać początkową wartość zapisaną w przydzielonej dynamicznie pamięci
- Zaktualizować wartość w przydzielonej dynamicznie pamięci, przypisując jej drugą wartość wejściową
- Wypisać zaktualizowaną wartość
- Użyć
delete, aby zwolnić przydzieloną dynamicznie pamięć - Po usunięciu ustawić wskaźnik na
nullptr - 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 successfullySpró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;
}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
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online