Niepożądana zmiana wartości zmiennej

0

Witam,
Mam następujący problem, stworzyłem kolejkę własnej implementacji, w której przechowuje wartości liczbowe. Przykładowo mam 2 wrzucam to do kolejki, wyświetlam - ok jest dwójka, następnie dostaje jakiś inny element, np. 5, wrzucam do kolejki, wyświetlam a tu zonk, zamiast wcześniej wspomnianej dwójki jest jakaś liczba z kosmosu typu 65000. Tutaj pojawia się moje pytanie, czy jest jakiś sposób aby zabezpieczyć elementy w kolejce przed niepożądaną zmianą wartości danych?

1

Moja szklana kula podpowiada, że masz błąd w osiemdziesiątej siódmej linijce pliku six.c.

0

@Patryk27: Faktycznie, ktoś mi podmienił średnik na grecki znak zapytania. To wiele wyjasna.

http://pastebin.com/XetPGTpr tutaj jest implementacja kolejki z której korzystam.

1

1.Zmień nazwę element na value (wraz z odpowiadającymi akcesorami).
2.Nie wykorzystuj yoda conditions - zwyczajowo porównuje się zmiennik do niezmiennika (czyli nie 0 == cośtam, a cośtam == 0).
3.Zapoznaj się z nullptr zamiast 0.

Tak na pobieżną analizę, kod wydaje się poprawny (w rozumieniu: powinien działać poprawnie). Debugger coś podpowiada?

Edit: http://ideone.com/gQOU8e - musisz mieć bug w innym miejscu.

0

Prześledziłem wartości jakie przybierają zmienne i wszystko było ok z wyjątkiem tego właśnie miejsca. Wydaje mi się, że to musi być ta kolejka, bo kiedy podstawiam za nią tą z STL'a to wszystko działa jak należy.

0

Wrzuć cały kod reprezentujący problem.

0

Nie bardzo wiem co się stało, ale już wszystko zaczęło działać. Jeśli mógłbym to miałbym pytanie co do tej kolejki, mianowicie chodzi o metode dequeue() zwraca ona wskaźnik na węzeł usuwany z kolejki, jednak nie jest on chyba całkowicie usuwany z pamięci? Jeśli tak to co należałoby zrobić aby go usunąć i zwolnić trochę miejsca na inne rzeczy?

1

Nie bardzo wiem co się stało, ale już wszystko zaczęło działać.

Jeśli nagle zaczęło wszystko działać, najprawdopodobniej nadal masz bug w kodzie. Use after free, błędne indeksowanie czy cokolwiek - po prostu póki co masz warunki, które sprzyjają jego ukryciu. Nie zdziw się, gdy aplikacja wykrzaczy się w losowym miejscu.

Jeśli tak to co należałoby zrobić aby go usunąć i zwolnić trochę miejsca na inne rzeczy?

Najlepiej byłoby nie wykorzystywać gołych wskaźników (antyidiom w C++, poczytaj sobie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1