IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Problem s alokaciou

Aktivity
Avatar
expoox
Tvůrce
Avatar
expoox:18.11.2017 19:13

Ahoj, nefunguje mi velmi alokacia 2d pola, neak tomu neviem prist na klb, viete mi prosim poradit ?

struct matrix {
        int row;
        int column;
        int **mat;
};

struct matrix allocateMatrix(int row, int column) { // PROBLEM - nealokuje ?
        struct matrix m;

        m.mat = (int**)malloc(row * sizeof(int*));
        for (int i = 0; i < row; i++)
                m.mat[i] = (int*)malloc(column * sizeof(int));

        printf("pocet poli: %lu\n",sizeof(m.mat)/sizeof(int));
        printf("pocet podpoli 1: %lu\n",sizeof(m.mat[0])/sizeof(int));
        printf("pocet podpoli 2: %lu\n",sizeof(m.mat[1])/sizeof(int));
        printf("row %i column %i\n", row, column);
        return m;
}

pri predani funkcii napr cisla 5 a 6 mam vystup :

pocet poli: 2
pocet podpoli 1: 2
pocet podpoli 2: 2
row 5 column 6

Editováno 18.11.2017 19:15
 
Odpovědět
18.11.2017 19:13
Avatar
Odpovídá na expoox
Matúš Olejník:18.11.2017 20:14

mne pre tvoj vstup dá výstup samé 1 avšak vráti sa ti správne alokované 2D pole, len sa nespoliehaj na tie výpisy pretože ak zavoláš sizeof na dynamicky vytvorené pole tak ti vráti veľkosť pointera pre statické pole sa počet elementov dá zistiť tak ako to ty máš

sizeof(array)/sizeof(type)
Nahoru Odpovědět
18.11.2017 20:14
/* I am not sure why this works but it fixes the problem */
Avatar
expoox
Tvůrce
Avatar
Odpovídá na Matúš Olejník
expoox:18.11.2017 20:23

ok, tak mne to padalo totiz na riadku m.mat[i][j] = h;, myslel som ze preto ze to pole nieje alokovane ale ak vravis ze by malo byt, tak preco potom to pada? (Nepripustna instrukcia) ... musim z allocateMatrix returnovat pointer ?

struct matrix scanMatrix (int row, int column) {
        struct matrix m;

        m.row = row;
        m.column = column;

        for (int i = 0; i < m.row; i++) {
                for (int j = 0; j < m.column; j++) {
                        int h;
                        scanf("%i",&h);
                        m.mat[i][j] = h;  // !!!!! PROBLEM
                }
        }

        return m;
}

EDIT:// aha ja som len slepy :D ja to vpisujem do nealokovaneho pola , pardon za spam

Editováno 18.11.2017 20:25
 
Nahoru Odpovědět
18.11.2017 20:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.