Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prosleđivanje 2D niza s alokacijom

[es] :: C/C++ programiranje :: Prosleđivanje 2D niza s alokacijom

[ Pregleda: 1585 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bostek

Član broj: 114388
Poruke: 3
*.adsl-3.sezampro.yu.



+1 Profil

icon Prosleđivanje 2D niza s alokacijom02.06.2010. u 21:15 - pre 169 meseci
Imam problem s 2D nizom čija "dublja" dimenzija treba da se alocira van procedure u kojoj je deklarisan i u kojoj se alocira "plića" dimenzija. Donji code je esencija problema (jako pojednostavljeno u odnosu na original). Varijanta 1 je ono sto provereno radi O.K., a varijanta 2 je ono sto mi treba, ali dobijam crash s C++/MinGW pod Qt-om.

Code:
//VARIJANTA 1
void cfunc(int j, int &k, double **Niz)
{
        //...

        k = 15;
        Niz[ j ] = new double[ k ];
        for( int i = 0; i < k; i++ )  Niz[ j ][ i ] = i;

        //...
}

void bfunc(int j, int &k, double **Niz)
{
        //...

        cfunc(j, k, Niz);

        //...
}

void main()
{
        //...

        double **Niz;

        int Dim1 = 10, k;
        Niz = new double*[ Dim1 ];

        for( int j = 0; j < Dim1; j++ )
        {
                bfunc(j, k, Niz);

                //...
        }
}


//VARIJANTA 2
void cfunc(int &k, double *Niz_j)
{
        //...

        k = 15;
        Niz_j = new double[ k ];
        for( int i = 0; i < k; i++ )  Niz_j[ i ] = i;

        //...
}

void bfunc(int &k, double *Niz_j)
{
        //...

        cfunc(k, Niz_j);

        //...
}

void main()
{
        //...

        double **Niz;

        int Dim1 = 10, k;
        Niz = new double*[ Dim1 ];

        for( int j = 0; j < Dim1; j++ )
        {
                bfunc(k, Niz[ j ]);

                //...
        }
}


Ima li neko ideju gde grešim kod varijante 2?
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Prosleđivanje 2D niza s alokacijom02.06.2010. u 22:47 - pre 168 meseci
Funkcija cfunkc mora da ima parametar Niz_j kao double** Niz_j, jer samo tako možeš da vratiš double* iz funkcije. Drugim rečima u main-u moraš da pozivaš bfunc sa bfunc(k, &Niz[ j ]), a bfunc i cfunc moraju da izgledaju ovako: void bfunc(int &k, double **Niz_j), a u funkciji cfunc svuda gde stoji Niz_j mora da stoji *Niz_j, na primer *Niz_j = new double[ k ].
 
Odgovor na temu

Bostek

Član broj: 114388
Poruke: 3
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Re: Prosleđivanje 2D niza s alokacijom03.06.2010. u 05:19 - pre 168 meseci
Much appreciated.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Prosleđivanje 2D niza s alokacijom

[ Pregleda: 1585 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.