[ Bostek @ 02.06.2010. 21:15 ] @
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?
[ Mihajlo Cvetanović @ 02.06.2010. 22:47 ] @
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 ].
[ Bostek @ 03.06.2010. 05:19 ] @
Much appreciated.