(C++) Crash w funkcji swap

0

Pisze algorytm genetyczny i w pewnych przypadkach mi sie wiesza. Wiem kiedy, ale nie wiem dlaczego.
Fragment kodu:

int nr1=rand() % wlk_popul;
int nr2=rand() % wlk_popul;
swap(tabpopul[nr1][0],tabpopul[nr2][0]);

Generalnie tablica wyglada tak: tabpopul[iloscosobnikow][2][dlugosc_genu]
W kodzie chce zmienic miedzy dwoma osobnikami pol genotypu.

Program crashuje sie gdy nr1 lub nr2 == 0 i odwoluje sie do np : swap<bool*>(__a=@0x1849f38, __b=@0x0) dla nr1 == 28350 nr2 == 0 . Co mniemam sie jest pierwszym adresem RAM, a nie tabeli.

Cały kod http://pastebin.com/w4AgWCiW (192 linijka)

0

Nie chcesz czasem zamienić wskaźników ze sobą?
Skoro tabpopu to tablica 3-wymiarowa, a do swapa przesyłasz podwójny wskaźnik, powinieneś iteracyjnie pozmieniać elementy.

4

odpowiedź jest prosta. Za dużo masz w jednej funkcji (main). Nikt normalny nie jest w stanie tego ogarnąć. Powinieneś mieć z 10 funkcji robiące kawałek czegoś.

sam błąd kryje się w liniach 169 oraz 173, 174 - przekraczasz zakres tablicy (brakuje "-1"), co przynosi skutek dużo później.

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