Nie wiem, co debugger próbuje mi powiedzieć

Nie wiem, co debugger próbuje mi powiedzieć
hdw3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

Witam!
W pewnej metodzie mam linię if(rand() % 100 <= 49) i ona z jakiejś nie znanej przyczyny wywala mi program(wcześniej używam identycznej linii kilkakrotnie i nie ma żadnych zgrzytów), a jak zacznę debugować to już zupełnie nie wiem, co się dzieje.

Debuguje w ten sposób:

ta
I różne są sekwencje breakpoint'ow, dla tych samych danych (poza random), ale zawsze na koniec jest crash.

  1. 1 -> 2 = crash
  2. 1 -> 2 -> 3 ->1 -> 2 = crash
  3. 1-> 2 -> -> 1 -> 2 = crash
    Więc zakładam, że linijka przy drugim breakpoint'cie crashuje program, ale nie mam zielonego pojęcia czemu.

Niżej jest informacja, którą próbuje mi przekazać debugger, ale znowu nie mam zielonego pojęcia, co to znaczy.
ti
Jest ktoś w stanie mi powiedzieć, co to oznacza albo, co powoduje takie zachowanie?

edytowany 1x, ostatnio: hdw3
lion137
Za mało info, żeby odtworzyć problem, jaki kompilator? Jakie importy? Masz jakiś dziwny debuger, Weż sobie normalnie odpal GDB w bashu i Patrz krok po kroku co się dzieje.
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
2

Dereferujesz dangling pointer. Dokładniej debugowa sterta msvc zaznacza wolne bloki sterty sekwencją 0xDD, a ty taki wolny blog próbujesz odczytać. Crasha dostajesz w _Equal z nagłówka xstring, więc dzieje się to podczas próby porównania std::stringa (najprawdopodobniej już na etapie tworzenia std::stringa masz memory stompa). Skoro wiesz jak stawiać breakpointy to teraz spróbuj prześledzić krokowo stan pamięci, którą odczytujesz/modyfikujesz.

Btw, polecam zmienić język IDE na angielski, bo oczy krwawią od tego co tam jest napisane po polsku.

hdw3
Dzięki, za wyczerpującą odpowiedź, ale jako, że jestem początkujący to nie rozumiem wszystkiego, co powiedziałeś, więc może zadam głupie pytanie. Czyli mój program prawdopodobnie wysypuje się jak próbuje porównać dwa stringi? Czy zwyczajnie coś ze wskaźnikami popsułem?
fasadin
zobacz stacktrace i bedziesz wiedziec przy jakiej Twojej linijce sie wywalil i mozesz wtedy dac tam breakpointa i zobaczyc wartosci
hdw3
Dzięki za pomoc. CallStack w visualu wszystko wyjaśnił.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.