limlight
(Cieslak Kaska)
8 Styczeń 2017 00:22
#1
Witam
próbuję napisać program, w którym tworzę 4-wymiarową tablicę i fragment tej tablicy uzupełniam losowo liczbami 0-1.
Program się kompiluje, ale pojawia się segmentation fault.
Nie do końca potrafię używać gdb, ale generalnie problem leży w generowaniu liczb pseudolosowych, lub w przekazaniu tblicy do funkcji fill.
Niestety nie potrafię znalezć błędu.
w linku znajduje się kod:
http://wklej.org/id/3009285/
Moje umiejętności nie są wysokie, więc bardzo proszę o dokładne wytłumaczenie gdzie i dlaczego w kodzie jest błąd.
Pozdrawiam
stasinek
(stasinek)
8 Styczeń 2017 05:43
#2
int tab[][N][N][2] dlaczego nie tab[N][N][N][2]?
INT = cokolwiek %10 -> 1-9 -> dzielone / 10 = 0;
if (0<0.7) tab[i][j][k][0] = 1;
fill(tab, x1, ystart=5, z1, xmax5, ymax=1 dlaczego?, xmax5);
dlaczego zaczynasz wypełnianie od 1 nie od 0?
limlight
(Cieslak Kaska)
8 Styczeń 2017 09:44
#3
int tab[][N][N][2] dlaczego nie tab[N][N][N][2]?
Debugger znalazł mi błąd w linijce definiującej funkcję fill, zapis tab[][N][N[2] jest próbą zlikwidowania tego błędu.
Dziękuję za zwrócenie uwagi z modulo.
fill(tab, x1, ystart=5, z1, xmax5, ymax=1 dlaczego?, xmax5);
Tu też zaszła pomyłka. Chodziło o to, aby uzupełniane były komórki od 2 do 5, pomyliłam kolejność wprowadzanych argumentów…
Funkcja fill ma wypełniać obszar tablicy ograniczony przez współrzędne podane do funkcji - dlatego zaczynam wypełnianie tablicy od drugiej komórki i kończę na szóstej, choć tablica jest większa.
Jednak poprawiony kod wciąż wyrzuca segfault., w linijce 27 poniższego kodu:
http://wklej.org/id/3009404/
Fizyda
(Fizyda)
8 Styczeń 2017 12:10
#4
Nie możesz w deklaracji funkcji określić ilo elementową tablicę przyjmujesz.