Segmentation fault, źle zaalokowana pamięć?

0

Witam,
Męczę się z następującym problemem: gra w życie, tryb wprowadzania z klawiatury, tryb losowy, wczytywanie planszy z pliku. Jeśli chodzi o pierwsze dwa wszystko działa w porządku, natomiast przy wczytywaniu pliku wywala segmentation fault. Próbowałem ręcznie wklepywać ustawienie planszy, dalej to samo. Sprawdziłem, że dane wczytuje poprawnie, jednak co mnie niepokoi np. dla tablicy 10x10 dla tab[9][10000] wypluwa mi jakąś losową wartość, zamiast wywalać błąd o braku dostępu do pamięci. To normalne?
Tutaj kod dla alokowania pamięci

tab = (int**)malloc(w*sizeof(int*));
for(i=0;i<w;i++) {tab[i] = (int*)malloc(k*sizeof(int));}

tutaj miejsce, gdzie wywala segmentation fault

	    for(i=1;i<=w;i++){for(j=1;j<=k;j++){temp[i][j]=tab[i-1][j-1];}}
        for(i=1;i<=w;i++){temp[i][0]=tab[i-1][k-1];}
        for(i=1;i<=w;i++){temp[i][k+1]=tab[i-1][0];}
        temp[0][0]=tab[w-1][k-1];
        temp[0][k+1]=tab[w-1][0];
        temp[w+1][0]=tab[0][k-1];
        temp[w+1][k+1]=tab[0][0];
        for(i=1;i<=k;i++){temp[0][i]=tab[w-1][i-1];}
        for(i=1;i<=k;i++){temp[w+1][i]=tab[0][i-1];}
0

Pokazałeś przydzielenie tablicy tab natomiast nadal nic nie wiadomo o tablice temp

0

przydzielenie temp wygląda w ten sposób

temp = (int**)malloc((w+2)*sizeof(int*));
for(i=0;i<(w+2);i++) {temp[i] = (int*)malloc((k+2)*sizeof(int));}
0

wiersz drugi: for(i=1;i<=w;i++){temp[i][0]=tab[i-1][k-1];} czemu równe k ?

0

Gra odbywa sie na torusie, dlatego tam jest przejście z końca na początek. A błąd debugger wywala już w pierwszym wierszu.

1

Jeżeli błąd jest w pierwszym wierszu to prawdopodobnie temp albo tab nie są przydzielone albo przydzielone ale z innymi w,k niż w tym fragmencie.

0

Nawet nie wiesz jak Ci dziekuje. Było po prostu w złym miejscu.

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