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

Wskaźnik usuniętego obiektu

VPS Starter Arubacloud
0 głosów
281 wizyt
pytanie zadane 23 lutego 2017 w C i C++ przez Nekronomik Użytkownik (600 p.)
Witam, problem wygląda tak że mam adres jakiegoś obiektu i 2 wskaźniki na ten obiekt.
Do tych dwóch adresów przypisałem adres obiektu (oczywiście wskaźniki dynamiczne).
Na jednym wskaźniku usunąłem adres wraz z obiektem i przypisałem wskaźnikowi NULL.
Lecz dalej mam jeszcze jeden wskaźnik z adresem usuniętego już obiektu.
Pytanie jest teraz takie, jak sprawdzić czy ten adres w tym wskaźniku został usunięty.

2 odpowiedzi

0 głosów
odpowiedź 23 lutego 2017 przez criss Mędrzec (172,590 p.)

Nie ma takiej możliwości. Dlatego po zwolnieniu pamięci dobrą praktyką jest przypisanie do wskaźnika nullptr - wtedy można łatwo sprawdzić czy wskazuje na istniejący obiekt. 

PS:

oczywiście wskaźniki dynamiczne

 Raczej wskaźnik na dynamicznie zaalokowaną pamięć (obiekt)? "Dynamiczny wskaźnik" sugeruje raczej dynamicznie zaalokowany wskaźnik, ale i tak dziwnie brzmi.

usunąłem adres wraz z obiektem

Nie możesz usunąć adresu. Adres to wartość. Usuwasz (dealokujesz) obiekt - pamięć. 

komentarz 23 lutego 2017 przez Nekronomik Użytkownik (600 p.)
Tak, wiem ze nie da się usunąć adresu ale inaczej nie mogłem tego napisać :D
Tu jest problem taki że mam sporo adresów do obiektów które się nawzajem zabijają
np: obiekt 1 i obiekt 2 chcą zabić obiekt 3 ale obiekt 1 był pierwszy a obiekt 2 o tym nic nie wie i dobiera się do adresu obiektu 3 co wiadomo czym skutkuje.
komentarz 23 lutego 2017 przez criss Mędrzec (172,590 p.)
No to jest źle napisany kod po prostu :P
komentarz 23 lutego 2017 przez Nekronomik Użytkownik (600 p.)
Kod jest dobrze napisany, lecz muszę inne rozwiązanie znaleźć. Bo na tablicach obiektów ten sposób działał a na listach to obiekty są już usuwane.
komentarz 23 lutego 2017 przez criss Mędrzec (172,590 p.)

obiekt 1 i obiekt 2 chcą zabić obiekt 3 ale obiekt 1 był pierwszy a obiekt 2 o tym nic nie wie i dobiera się do adresu obiektu 3 

No nie - to nie jest dobrze napisany kod. Dobrze napisany != kompilujący się. Dobrze napisany to między innymi bezpieczny. 

0 głosów
odpowiedź 24 lutego 2017 przez draghan VIP (106,230 p.)

Jeśli mówimy o C++:

Nie używamy NULL, tylko nullptr. Zapoznaj się ze wskaźnikami inteligentnymi [sekcja "Smart Pointers"] i od dziś zacznij ich używać. Do tworzenia tablic służą w C++ kontenery. Zachęcam też do poczytania CppCoreGuidelines - nie jest to dokument dokończony, wciąż jest w trakcie tworzenia. Ale już w tej chwili zawiera wiele cennych wskazówek.

To, co opisujesz, to stworzenie tzw. 'dangling pointera'. Dość częsty błąd, szczególnie w dużych projektach o starej bazie kodu.

Jeśli mówimy o C:

...staraj się nie usuwać obiektów, jeśli wiesz, że wciąż wskazują na nie inne wskaźniki. Hej, a nie możesz zacząć pisać w C++? ;)

Podobne pytania

0 głosów
1 odpowiedź 105 wizyt
pytanie zadane 12 kwietnia 2018 w C i C++ przez Perseusz Bywalec (2,190 p.)
+2 głosów
2 odpowiedzi 381 wizyt
pytanie zadane 26 grudnia 2021 w C i C++ przez Dynamic Bywalec (2,910 p.)
0 głosów
1 odpowiedź 205 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...