zerowanie dynamicznej tablicy w C

0

Witajcie, uczę się pracować na wskaźnikach i na pamięci. Niestety już na wstępie napotkałem problem, mianowicie napisałem coś takiego:

printf("Podaj poczatkowa rozpietosc tablicy\n");
int n,i,j;
int **tab;
scanf("%d",&n);
tab = (int**)malloc(n * n * sizeof(int));
    
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
        tab[i][j]=0;
        }
    }
    
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
        printf("\t%d",tab[i][j]);
        }
    printf("\n");
    }
    

Założenie jest takie, że program zeruje wartości 2 wymiarowej tablicy rozpiętej wg uznania użytkownika, a następnie ją wyświetla. Problem w tym, że zawiesza mi się program przy wartościach n>2.
Co może być przyczyną takiego zachowania?

1

problem jest taki, że nie wiesz co to jest tablica dwuwymiarowa, przez co nie stworzyłeś jej poprawnie.

tab jest to tablica wskaźników na wartości (lub wskaźnik na wskaźnik na wartość), a nie tablica wartości.

obejrzyj sobie rysunek na tej stronie i powinieneś się domyślić czego nie zrobiłeś
http://math.hws.edu/javanotes/c7/s5.html
(temat jest z javy, ale zasada działania ta sama)

0

zamiast zerowania w pętli użyj po prostu calloc zamiast malloc, które zeruje samo.

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