Tablica dwuwymiarowa C

0

Witam mam problem z zrobieniem tablicy dwuwymiarowej w C na wskaźnikach mógłby ktoś rzucić okiem ?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void createtable(int **t, int r, int c);
void showtable(int **t, int r, int c);
void transposedtable(int **t, int r, int c);

main (){
    int **tab, rows, colls,i;
    srand(time(0));
    printf("Podaj liczbe kolumn:" );
    fflush(stdin);
    scanf("$d",&colls);
    printf("Podaj liczbe wierszy:" );
    fflush(stdin);
    scanf("$d",&rows);

    tab=(int **)malloc(colls*sizeof(int));

    createtable(tab,rows,colls);
    showtable(tab,rows,colls);

    for(i=0;i<colls;i++){
        free(tab[i]);
    }
    free(tab);
}

void createtable(int **t,int r, int c){
    int i, j,n;

    for(i=0;i<c;i++){
        *(t+i)=(int *)malloc(r*sizeof(int));
        for(j=0;j<r;j++){
            n=rand();
            *(*(t+i)+j)=n;
        }
    }

}
void showtable(int **t , int r, int c){
    int i, j;
    for(i=0;i<c;i++){
        for(j=0;j<r;j++){
            printf("%d \t", *(*(t+i)+j));
        }
        printf("\n");
    }
}
 
1

Funkcja main powinna być typu int i zwracać określoną wartość (0 jeśli nie wystąpiły żadne błędy). Czemu w scanf używasz $d zamiast %d?

Tu masz błąd:

tab=(int **)malloc(colls*sizeof(int));

Powinno być

tab=(int **)malloc(colls*sizeof(int*));

Poza tym, choć to nie błąd, pomyliłeś wiersze z kolumnami ;-)

0

Zamień "$d" na "%d".

http://ideone.com/lva4og

BTW, drugi fflush chyba niepotrzebny?

0

dzięki wielkie za odpowiedź, '$' wziął się pewnie z przyzwyczajenia do PHP, a wracając do alokacji pamięci to dlaczego jest tam na końcu (int*)?

0

Dlatego, abyś otrzymał rozmiar wskaźnika na int, a nie rozmiar samego int'a, skoro alokujesz pamięć na przechowywanie wskaźników na int.

0

Ok poprawiłem błędy i teraz działa jak powinno, dzięki za pomoc

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