Dynamiczna tablica dwuwymiarowa

0

Napisz program, w którym utworzysz macierz dynamiczną, wypełnisz ją liczbami całkowitymi należącymi do przedziału [−10, 10] oraz wypiszesz na ekran zawartość tej macierzy i sumę elementów leżących na jej przekątnej. Program przed zakończeniem pracy powinien usunąć macierz.
Mam takie zadanie, nie jestem pewna kodu mam jakis bład ale nie optrafie go znalezc. :/

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

void zapelnij_tablice(int **tablica, unsigned int ilosc_elementow)
{
    int i,j;
    srand(time(0));
    for (i=0; i<ilosc_elementow; i++)
        for (j=0; j<ilosc_elementow; j++)
            {
                tablica[i][j]=-10+rand()%+20;
            }
}

void wyswietl_tablice (int **tablica, unsigned int ilosc_elementow)
{
    int i,j;
    puts("\n[\n");
    for (i=0; i<ilosc_elementow; i++)
       {
        for (j=0; j<ilosc_elementow; j++)
            printf("%d\t", tablica[i][j]);
        puts("\n");
       }
       puts("\n]\n");
}

int main ()
{
    puts("Ile elementow ma zawierac tablica?");
    unsigned int ilosc_elementow=0;
    scanf("%u", &ilosc_elementow);
    int *tablica_wskaznik= (int *)calloc(ilosc_elementow, sizeof(int));
    if (tablica_wskaznik)
    {
        zapelnij_tablice(tablica_wskaznik, ilosc_elementow);
        wyswietl_tablice(tablica_wskaznik, ilosc_elementow);
        free(tablica_wskaznik);
        tablica_wskaznik=NULL;
    }
    return 0;
}
0

Najpierw należy utworzyć wskaźnik na wskaźnik na inta i zaalokowac pamięć na pierwszy wymiar tablicy. A potem, w pętli for zaalokować dla każdego elementu podtablicę jednowymiarową.

int ** tablica = (int **)malloc(sizeof(int *)*10);
for (i = 0; i < 10; i++)
  tablica[i] = (int *)malloc(10 * sizeof(int));

I dopiero teraz można używać tablicy.
Należy pamiętać o zwolnieniu jej, gdy nie będzie potrzebna.

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