Zwracanie tablicy wielowymiarowej przez funkcję


([cod3r]) #1

Witam,

Mam następujące pytanie. Otóż piszę program i potrzebuję zwrócić tablicę wielowymiarową przez funkcję. Chciałbym się zapytać, który sposób jest poprawny, czy może oba są poprawne (bo oba działają).

//1 sposob

int **funkcja(int**tablica, int rozmiar){

   ....

    return tablica;

}

..

//tworze tablice wielowymiarowa

int **tablica = new int *[rozmiar];

    for(i = 0; i < rozmiar; i++)

        tablica[i] = new int[15];

//wywolanie funkcji

tablica = funkcja(tablica, rozmiar)

//2 sposob

int funkcja(int **tablica, int rozmiar){

   ....

    return **tablica;

}

..

//tworze tablice wielowymiarowa

int **tablica = new int *[rozmiar];

    for(i = 0; i < rozmiar; i++)

        tablica[i] = new int[15];

//wywolanie funkcji

**tablica = funkcja(tablica, rozmiar)

Jeszcze chcialbym sie dowiedziec czy takie zwalnianie pamieci jest poprawne, czy zwalnia tablice i wszystkie jej wymiary?

delete[] tablica;

Czy nalezy zwalniac w ten sposob?

delete[] *tablica;

delete[] tablica;

(Enterbios) #2

Poprawny jest sposób pierwszy. W drugim zwracasz liczbę typu int nie tablice, a dokładniej pierwszą liczbę pierwszej tablicy, tak jakbyś wywołał tablica[0][0], o ile nie przesuwałeś nigdzie wskaźnika.

Z delete zasada jest taka, zwalniasz tak samo jak alokowałeś ale w odwrotnej kolejności. Więc w twoim przypadku:

for(i = 0; i < rozmiar; i++)

delete[] tablica_;_

delete[] tablica;


([cod3r]) #3

Ok, dzięki za odpowiedź. Chociaż jak próbowałem też sposobu 2 to program działał poprawnie, stąd moje wątpliwości.