Dynamicznie przydzielona tablica C ++

Dynamicznie przydzielona tablica C ++

Tablice są bardzo ważną strukturą danych w C ++, które służą do przechowywania podobnych rodzajów elementów. Tablice są podzielone głównie na dwa różne typy I.mi. statyczny i dynamiczny. Tablice statyczne są tymi, których rozmiar jest wstępnie zdefiniowany w kodzie, podczas gdy tablice dynamiczne są tymi, których rozmiar jest zdefiniowany w czasie wykonywania. W tym artykule wyraźnie porozmawiamy o dynamicznych tablicach w C++. Ponadto zwrócimy szczególną uwagę na ich alokacja i dealokokację, dzieląc się z Tobą szczegółowym przykładem w Ubuntu 20.04.

Dynamicznie przydzielane tablice w c++

Stwierdziliśmy już, że rozmiar tablicy dynamicznej jest zdefiniowany w czasie wykonywania. Można jednak zapytać, dlaczego potrzebujemy dynamicznie przydzielanych tablic, kiedy możemy wygodnie korzystać z tablic statycznych? Cóż, czasami napotykasz takie sytuacje, w których początkowo nie jest znany rozmiar tablicy. W takich przypadkach możesz uzyskać rozmiar tablicy jako dane wejściowe od użytkownika w czasie wykonywania.

Ale nie jest to możliwe w przypadku tablic statycznych, ponieważ rozmiar tablicy statycznej po zdefiniowaniu w kodzie nie można zmienić. W tym miejscu wchodzą dynamicznie przydzielone tablice, które mogą zdefiniować tablice dowolnego pożądanego rozmiaru w czasie wykonywania. Dynamiczne tablice w C ++ można łatwo utworzyć za pomocą „nowego” słowa kluczowego. Dokładna składnia zostanie wyjaśniona w dalszej części tego artykułu.

Jednak ważną kwestią, na którą należy zwrócić uwagę, jest to, że tablice statyczne są zawsze tworzone na stosie systemu, a sam system bierze odpowiedzialność za zwolnienie swojego stosu po zakończeniu programu programu. Z drugiej strony dynamicznie przydzielone tablice są zawsze tworzone na stosie i musisz ręcznie uwolnić pamięć zajmowaną przez dynamiczną tablicę. Teraz musisz zobaczyć przykład omówiony poniżej, aby zrozumieć użycie dynamicznie przydzielonych tablic.

Korzystanie z dynamicznie przydzielonych tablic w C ++ w Ubuntu 20.04

W tym przykładzie chcemy nauczyć Cię użycia dynamicznie przydzielanych tablic w C++. Powiemy ci, jak możesz zadeklarować i zainicjować dynamiczną tablicę w czasie wykonywania. Następnie wyświetlimy elementy dynamicznie przydzielonej tablicy. Wreszcie pokażemy, w jaki sposób możesz przekazać pamięć zajmowaną przez dynamiczną tablicę w C++. Aby się tego wszystkiego dowiedzieć, będziesz musiał zobaczyć kod pokazany na poniższym obrazku:

W tym programie C ++ mamy naszą funkcję „Main ()”, w której zdefiniowaliśmy liczbę całkowitą „num”. Ta liczba całkowita będzie odpowiadała rozmiarowi naszej dynamicznej tablicy, którą zamierzamy stworzyć później. Następnie wyświetliśmy wiadomość na terminalu z prośbą o wprowadzenie dowolnego wyboru dla tablicy dynamicznej. Następnie wzięliśmy ten rozmiar jako dane wejściowe od użytkownika. Następnie, za pomocą instrukcji „int *array = new int (num)”, zadeklarowaliśmy tablicę dynamiczną w czasie wykonywania, która ma rozmiar równy zmiennej „num”. „Tablica” odnosi się do nazwy tej tablicy.

Następnie ponownie wyświetliśmy wiadomość na terminalu, prosząc użytkownika o wprowadzenie elementów tej tablicy. Po tej wiadomości następuje pętla „for”, która iteruje do wielkości tablicy i.mi. num. W tej pętli wzięliśmy elementy tej dynamicznej tablicy jako dane wejściowe od użytkownika.

Po zaludnionej tablicy dynamicznej chcieliśmy wyświetlić jego elementy na terminalu, dla którego najpierw wyświetliśmy wiadomość za pomocą instrukcji „Cout”. Następnie mamy kolejną pętlę „dla”, która ponownie iteruje rozmiar tablicy dynamicznej. W tej pętli po prostu wyświetliśmy elementy tablicy na terminalu. Następnie chcieliśmy przekazać pamięć zajmowaną przez tę dynamiczną tablicę, dla której użyliśmy instrukcji „Usuń [] tablicę”. Wreszcie, aby być po bezpiecznej stronie, użyliśmy instrukcji „Array = NULL”, aby również usunąć odniesienie zerowego tablicy dynamicznej, której pamięć właśnie rozdaliśmy.

Po napisaniu tego kodu, kiedy go skompilowaliśmy i wykonaliśmy, najpierw poproszono nas o wprowadzenie rozmiaru tablicy dynamicznej. Chcieliśmy, aby nasza dynamiczna tablica miała rozmiar „5”, jak pokazano na poniższym obrazku:

Gdy tylko weszliśmy do wielkości naszej dynamicznej tablicy, poproszono nas o to. W tym celu wprowadziliśmy liczby od 1 do 5, jak pokazano na poniższym obrazku:

Gdy tylko naciskaliśmy klawisz Enter po zaludnianiu naszej dynamicznej tablicy, jego elementy zostały wydrukowane na terminalu. Ponadto odbyło się również defaktacja pamięci dynamicznej z powodu tego, z czego powiadomienie o tym pojawiło się również na terminalu, jak pokazano na poniższym obrazku:

Teraz nieznacznie dostosujemy ten sam kod. Do tej pory dowiedzieliśmy się, w jaki sposób możemy zainicjować dynamiczną tablicę w C ++ i wyświetlić jej elementy na terminalu. Chociaż uwzględniliśmy również kod dotyczących rozleciania tej pamięci w naszym programie, nadal nie jesteśmy pewni, czy zajęta pamięć dynamiczna została pomyślnie przekazana, czy nie. Aby to zrobić, postaramy się uzyskać dostęp do części tej dynamicznej pamięci po jej rozpatrzeniu. Jeśli zostanie on udany dostęp, będzie to oznaczać, że dealokokacja pamięci nie nastąpiła poprawnie.

Jeśli jednak napotkamy jakikolwiek komunikat o błędzie, uzyskując dostęp do tej pamięci po jej rozpatrzeniu, będzie to oznaczać, że nasza zajęta pamięć dynamiczna została pomyślnie przekazana. Musisz rzucić okiem na następujący zmodyfikowany kod, aby to zrozumieć:

W tym zmodyfikowanym kodzie C ++ po prostu dodaliśmy wiersz na końcu naszego programu I.mi. Cout<

Kiedy skompilowaliśmy i wykonaliśmy ten kod, osiągnęło on doskonale dobrze, gdy tylko ten ostatni wiersz został wykonany, wygenerowano błąd w odniesieniu do usterki segmentacji, co w rzeczywistości oznacza, że ​​próbujesz uzyskać dostęp do lokalizacji pamięci, która już nie istnieje. Jest to wyświetlane na załączonym obrazie.

Oznacza to, że rozlega się naszą dynamiczną tablicą, która odbyła się z powodzeniem. Wyjście to sugeruje również, że próba dostępu do lokalizacji pamięci, która już nie istnieje, powoduje jedynie błąd środowiska wykonawczego, a nie błąd kompilacji. Oznacza to, że taki kod będzie zawsze pomyślnie kompilowany i nie będziesz w stanie złapać takiego błędu, dopóki nie uruchomisz kodu.

Wniosek

Ten artykuł miał na celu nauczenie korzystania z dynamicznie przydzielonych tablic w C ++ w Ubuntu 20.04. W tym celu najpierw podkreśliliśmy potrzebę korzystania z dynamicznie przydzielonych tablic w C++. Następnie przeszliśmy przez szczegółowy przykład, który wyjaśnił, w jaki sposób możesz tworzyć i poradzić sobie z dynamicznymi tablicami w C++. Ponadto podzieliliśmy się również metodą defakcjonowania dynamicznych tablic. Po przejściu przez ten przewodnik z pewnością uzyskasz podstawowe zrozumienie radzenia sobie z dynamicznymi tablicami w C++.