Nie wiem, co debugger próbuje mi powiedzieć

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?

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.

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