• 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.

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
808 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ź 186 wizyt
0 głosów
5 odpowiedzi 966 wizyt
pytanie zadane 24 czerwca 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)
0 głosów
2 odpowiedzi 382 wizyt
pytanie zadane 16 lutego 2019 w C i C++ przez niedzwiedz89 Nowicjusz (150 p.)

93,164 zapytań

142,176 odpowiedzi

321,938 komentarzy

62,493 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rucin93
  8. 641p. - rafalszastok
  9. 629p. - Piotr Aleksandrowicz
  10. 621p. - Dawid128
  11. 606p. - Mariusz Fornal
  12. 602p. - Michał Telesz
  13. 597p. - Hubert Chęciński
  14. 572p. - ssynowiec
  15. 527p. - Adrian Wieprzkowicz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...