Tablica dynamiczna dwuwymiarowa C

Odpowiedz Nowy wątek
2018-01-14 22:21
Bogaty Rycerz
0

Witam , mam problem z pewnym kawałkiem kodu. Zadeklarowałem tablice dwuwymiarową i zaalokowałem dla niej pamięc , następnie przekazałem jej wskaźnik do funkcji która powinna pobrać elementy do tej tablicy. Jednak po pobraniu elementów do pierwszego wiersza program sie zawiesza. Fragment ten wygląda niemal identycznie jak niektóre przykłady jakie znalazłem w internecie dlatego nie mam pojęcia co jest nie tak. Oto funkcja:

void Wpisanie1M(double **mac1,int w,int k)
{
    int i,j;
    printf("Podaj elementy macierza\n");
    for(i=0;i<w;i++)
    {
        for(j=0;j<k;j++)
        {
            printf("%d,%d: ",i+1,j+1);
            scanf("%lf",&mac1[i][j]);
        }
    }
}

Prosiłbym o wyrozumiałość , dopiero zaczynam swoją przygodę z programowaniem. Z góry dziękuje za pomoc.

edytowany 1x, ostatnio: kq, 2018-01-14 22:21
https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/ jeśli nie wiesz czy dany fragment jest istotny, to lepiej zamieść za dużo - kq 2018-01-14 22:22

Pozostało 580 znaków

2018-01-14 22:25
Bogaty Rycerz
0

Funkcja alokująca która wykonuje sie przed tą co podałem w pierwszym poście:
void Alokowanie(double mac,int w,int k)
{
int i;
mac=(double
)malloc(wsizeof(double)+1);
if(mac==NULL)
{
abort();
}
for(i=0;i<w;i++)
{
mac[i]=(double)malloc(ksizeof(double)+1);
if(mac[i]==NULL)
{
abort();
}
}
Zeruj(mac,w,k);
}

void Zeruj(double **mac,int w,int k)
{
int i,j;
for(i=0;i<w;i++)
{
for(j=0;j<k;j++)
{
mac[i][j]='\0';
}
}
}

Pozostało 580 znaków

2018-01-15 15:09
0

Jesli chcesz allokowac w sposob przedstawiony powyzej, to argument winien byc double ***mac; i wtedy analogicznie przerobiona reszta... http://kaczus.ppa.pl/art/Skrzynia_porad,18.html#argpointer


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2018-01-15 15:39
Pijany Kura
0

4 bajty = 1x int

4x4 = 16

16 bajtów to 4 inty
Lub tablica dwuwymiarowa 4x4 czyli 20 bajtów bo pierwsze 4 bajty mają adresy do komórek zawierających po 4 bajty.

Czaisz baze?

Pozostało 580 znaków

2018-01-15 17:06
Bogaty Rycerz
0

Świetny sposób z funkcją zwracającą wskaźnik zamiast alokowanie na danej macierzy w funkcji podany w wyżej wysłanym poradniku. Przerobiłem i wszystko śmiga jak trzeba , dzięki wielkie za pomoc :)

double **Alokuj(int w,int k)
{
    int i;
    double **mac;
    mac=(double**)malloc(w*sizeof(double*));
    if(mac==NULL)
    {
        abort();
    }
    for(i=0;i<w;i++)
    {
        mac[i]=(double*)malloc(k*sizeof(double));
        if(mac[i]==NULL)
        {
            abort();
        }
    }
    Zeruj(mac,w,k);
    return mac;

}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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