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

psucie wskaźnika przez drugi

Object Storage Arubacloud
0 głosów
86 wizyt
pytanie zadane 29 marca 2017 w C i C++ przez VirtualMember Pasjonat (15,790 p.)

Witam, mam taki oto kod

            Point* first;
			Point* second;

			first = doesExistPoint(from, graf);
			second = doesExistPoint(to, graf);

			if (first == NULL)
			{
				graf.push_back(from);
				first = &graf[graf.size() - 1];
			}

			if (second == NULL)
			{
				graf.push_back(to);
				second = &graf[graf.size() - 1];
			}

graf to vector<Point>

 

gdy funkcje doesExistPoint() nie zwrócą wskaźnika  na istniejący obiekt to są one tworzone w tych ifach - ale to jest problem. Po przejściu przez pierwszy if wszystko jest cacy, jednak po tej linijce:

                graf.push_back(to);

faktycznie tworzy nowy second, lecz zmienia wartości firsta (na totalnie minusowe, tak jakby wyrzucało nulla?) - czym to jest spowodowane?
 

 

 

1 odpowiedź

+3 głosów
odpowiedź 29 marca 2017 przez adrian17 Ekspert (344,860 p.)
wybrane 29 marca 2017 przez VirtualMember
 
Najlepsza
push_back() może realokować wewnętrzny bufor vectora (żeby zwiększyć swoją pojemność), przez co wszystkie elementy są przenoszone do innego miejsca w pamięci. Tym samym wszystkie wskaźniki na elementy uzyskane wcześniej w sposób &vec[5] tracą ważność.

Jeśli chcesz żeby używanie push_back nie psuło istniejących wskaźników na elementy, to sam std::vector musiałby przechowywać wskaźniki (vector<Point*>) a nie elementy.

Podobne pytania

0 głosów
1 odpowiedź 286 wizyt
–1 głos
1 odpowiedź 133 wizyt
0 głosów
1 odpowiedź 405 wizyt
pytanie zadane 20 lipca 2020 w Python przez bbbbbbbb Użytkownik (950 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...