Dynamiczne zarządzanie pamięcią za pomocą „new”
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 6 z 56.
Do tej pory pracowałeś z wskaźnikami, które wskazują na zmienne utworzone już w programie. Ale co, jeśli musisz tworzyć zmienne podczas działania programu? Właśnie wtedy niezbędna staje się dynamiczna alokacja pamięci za pomocą słowa kluczowego new.
Słowo kluczowe new pozwala przydzielić pamięć dla zmiennej na stercie podczas wykonywania programu. W przeciwieństwie do zwykłych zmiennych tworzonych na stosie, pamięć przydzielona dynamicznie istnieje do momentu, gdy jawnie ją zwolnisz.
int* ptr = new int; // Przydziela pamięć na liczbę całkowitą
*ptr = 42; // Przypisuje wartość do przydzielonej pamięciW tym przykładzie new int przydziela wystarczającą ilość pamięci do przechowywania liczby całkowitej i zwraca wskaźnik do tej lokalizacji pamięci. Następnie możesz użyć operatora dereferencji, aby przypisywać wartości i uzyskiwać dostęp do dynamicznie przydzielonej zmiennej, tak jak do każdej innej zmiennej wskazywanej przez wskaźnik.
Dynamiczne przydzielanie pamięci jest szczególnie przydatne, gdy nie wiesz, ile pamięci będzie potrzebne w czasie działania programu, lub gdy potrzebujesz, aby zmienne istniały poza zakresem, w którym zostały utworzone. Ta elastyczność sprawia, że new jest potężnym narzędziem do tworzenia bardziej złożonych programów.
Wyzwanie
ŁatwyUtwórz program demonstrujący dynamiczną alokację pamięci za pomocą słowa kluczowego new, aby przydzielić pamięć dla zmiennej podczas wykonywania programu.
Podane zostanie następujące wejście:
- Wartość całkowita do zapisania w dynamicznie przydzielonej pamięci
Twój program powinien:
- Użyć słowa kluczowego
new, aby dynamicznie przydzielić pamięć dla liczby całkowitej - Zapisać wskaźnik zwrócony przez
neww zmiennej wskaźnikowej o nazwienumPtr - Użyć operatora dereferencji, aby przypisać wartość wejściową do dynamicznie przydzielonej pamięci
- Wypisać wartość zapisaną w dynamicznie przydzielonej pamięci, dereferencjonując wskaźnik
- Wypisać adres pamięci zapisany we wskaźniku
Użyj następującego dokładnego formatu wyjściowego:
Value: [value]
Address: [memory address]Adres pamięci zostanie wyświetlony w formacie szesnastkowym, w którym C++ pokazuje adresy pamięci dla pamięci przydzielonej dynamicznie.
Spróbuj swoich sił
#include <iostream>
using namespace std;
int main() {
// Wczytaj dane wejściowe
int value;
cin >> value;
// TODO: Napisz swój kod poniżej
// Użyj 'new', aby dynamicznie przydzielić pamięć na liczbę całkowitą
// Zapisz wskaźnik w zmiennej o nazwie 'numPtr'
// Przypisz wartość wejściową do dynamicznie przydzielonej pamięci
// Wyświetl wynik
cout << "Value: " << /* wyłuskaj wartość wskazywaną przez numPtr tutaj */ << endl;
cout << "Address: " << /* wyświetl adres przechowywany w numPtr */ << endl;
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