• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wskaźniki. Problem z dynamicznym alokowaniem pamięci.

Object Storage Arubacloud
+1 głos
722 wizyt
pytanie zadane 24 czerwca 2015 w C i C++ przez Bartos Użytkownik (610 p.)

Witam,

Nie rozumiem tego dynamicznego alokowania pamięci, przykładowo jeśli zrobimy tak (http://wklej.org/id/1744911/), to również stworzymy tablicę z taką liczbą elementów jaką chcemy, a wskaźników do tego nie trzeba, ten w pętli jest jedynie po to aby zobaczyć adresy poszczególnych komórek tablicy. No chyba, że cały sens użycia wskaźników tkwi w tym, że przy ich użyciu mamy możliwość usunięcia utworzonej tablicy. Ale w takim razie nurtuje mnie pytanie dlaczego, gdy dodamy do programu powyżej komendę "delete [] tablica" (http://wklej.org/id/1744913/), program się skompiluje ale wysypie podczas wykonywania tejże komendy.Naszły mnie również rozważania, czy możemy usunąć tylko kilka wybranych komórek tablicy, np. w taki sposób "delete [5] tablica", no ale to już mogę sam sprawdzić :)

2 odpowiedzi

+4 głosów
odpowiedź 24 czerwca 2015 przez daan Pasjonat (17,640 p.)
edycja 24 czerwca 2015 przez daan

Stworzymy tablice o określonej ilości elementów, ale będzie to tablica statyczna, a taką usuwa system po zakończeniu programu dlatego ty nie mozesz tego zrobić tak jak chciałeś bo próbujesz usunąć nie swoją pamięć :P Poza tym tablice dynamiczną można alokować w dowolnym momencie np. użytkownik podaje liczbę i robisz tablice o takiej ilości elementów jaką podał użytkownik bez użycia dynamicznych tablic lub kontenerów STL tego nie zrobisz :) Jeżeli chodzi o ostatnie pytanie, "usunąć" kilku wybranych komórek z tej tablicy statycznej nie możesz, możesz je co najwyżej wyczyścić czyli wyzerować, oczywiście są tablice z których możesz usuwać elementy i wstawiać nowe, polecam poczytać o bibliotece STL :D

komentarz 29 czerwca 2015 przez Bartos Użytkownik (610 p.)

Dzięki :) 
Kurczę, ale nie rozumiem samego tego zapisu 

int *wskaznik;
wskaznik = new int [ile];
//kod
//

delete [] wskaznik;

No bo co to oznacza?

1. tworzymy wskaznik

2. zapisujemy do niego adres nowo utworzonej tablicy

3. usuwamy nową tablicę

 

No tylko po co ten wskaźnik? Nie można użyć operatora 'new' bez wskaźnika?

No i też jak pracować teraz na tej tablicy skoro nie ma nazwy? Rozumiem, że przez wskaźnik właśnie, np. cout<<*wskaznik; no tylko wtedy dostaniemy się do zerowego elementu tablic, tak? A jeśli chciałbym np. do 5 to musiałbym zapisać cout<<*wskazik+5; czy jak?

Ehhh, ciężki temat, cięzki.

komentarz 29 czerwca 2015 przez daan Pasjonat (17,640 p.)
jesteś na dobrym tropie, bez wskaźnika się nie da użyć new ale

1. używasz tego tak samo jak zwykłej tablicy wskaznik[4] to bedzie 5 element

2. nazwa tablicy jest jednoczesnie wskaznikiem na jego 1 element
komentarz 29 czerwca 2015 przez Bartos Użytkownik (610 p.)
Czyli mam to tak rozumieć, że ta tablica nazywa się wskaźnik? :)
komentarz 29 czerwca 2015 przez daan Pasjonat (17,640 p.)
dokładnie tak :)
komentarz 29 czerwca 2015 przez Bartos Użytkownik (610 p.)
Powoli zaczyna mi się to rozjaśniać, no ale chwila. To jeśli wpisałbym teraz cout<<wskaznik; to co bym dostał? Adres tablicy, czy zawartość pierwszego elementu tablicy, no bo nazwa tablicy jest wskaznikiem na jego 1 element.
komentarz 29 czerwca 2015 przez daan Pasjonat (17,640 p.)
Dostałbyś adres, żeby dostać się do tego na co wskazuje wskaźnik trzeba użyć operatora dereferencji :P czyli * po prostu

wskaznik <- dostaniesz adres

*wskaznik <- dostaniesz to na co wskazuje wskaznik

Zauważ, że zwykła tablica też jest wskaźnikiem :) z tym że nie możesz tej pamieci usunąć ani zmienić jej rozmiaru. Zrób sobie zwykła tablice statyczna i zobacz co się stanie jak zrobisz cout << tablica;
komentarz 30 czerwca 2015 przez Bartos Użytkownik (610 p.)
Po wielu próbach w kompilatorze, wydaje mi się, że zaczynam to łapać :)
Strasznie to wszystko skomplikowane. Dzięki wielkie za pomoc :)
0 głosów
odpowiedź 24 czerwca 2015 przez Pan Kulomb Pasjonat (18,630 p.)
Przydaje się to chociażby przy tworzeniu tablic o zmiennej liczbie elementów.

Podobne pytania

0 głosów
1 odpowiedź 158 wizyt
0 głosów
5 odpowiedzi 759 wizyt
pytanie zadane 24 czerwca 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)
0 głosów
2 odpowiedzi 315 wizyt
pytanie zadane 16 lutego 2019 w C i C++ przez niedzwiedz89 Nowicjusz (150 p.)

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...