Mam taką tablicę 2-wymiarową:
unsigned int **tab=new unsigned int *[wiersze];
for(i=0;i<wiersze;i++)
tab[i]= new unsigned int [kolumny];
przekazuję ją do funkcji w ten sposób:
void funkcja(unsigned int **tab, reszta parametrów)
w programie głównym funkcję wywołuję w ten sposób:
funkcja(tab, reszta parametrów)
Dotychczas tak robiłem z tablicami dwuwymiarowymi i wszystko było ok. W funkcji wykonywane są pewne operacje na tablicy. Niestety dopiero poraz pierwszy dzisiaj miałem sytuację, że muszę w funkcji zwalniać pamięć przekazywanej tablicy 2-wymiarowej i przydzielać nową tak, że ta tablica ma inną liczbę wierszy niż przed wejściem do funkcji. Na końcu funkcji daję aby mi wypisał tablicę i wypisuje dobrze np.
0 0 0 2
1 1 0 0
0 1 1 0
1 0 0 0
0 1 0 0
0 1 0 1
Jak wyjdę z funkcji to znowu daję aby wypisał mi tablicę i UWAGA:
1 0 0 0
0 1 1 0
1 1 0 0
0 0 0 2
0 1 0 0
0 1 0 1
Jakby po wyjściu z funkcji mieszają się indexy wierszy, wiersz 4 jest 1, 3->2, 2->3, 1->4.
Inny przypadek:
na samym końcu funkcji:
0 2 0 1
0 1 0 2
0 1 2 0
1 0 0 0
1 1 0 0
po wyjściu z funkcji:
1 0 0 0
0 1 2 0
0 1 0 2
0 2 0 1
1 1 0 0
4161840 4161816 4161792 4170488
Czyli podsumowując na samym końcu funkcji tablica jest poprawna taka jak chcę. Po wyjściu niestety coś się knoci. Nie wiem z czym może to miec związek, może z tym, że w funkcji zwalniam pamięć tablicy która jej zadeklarowałem w main(), a w main() na samym końcu programu zwalniam pamięć tablicy którą zadeklarowałem jej w funkcji. Nie wiem czy to o to chodzi. Nie próbowałem także opcji co by było jakbym globalnie zadeklarował tablicę, bo wolałbym to robić przez przekazywanie.