Przesyłanei dynamicznie alokowanej tablicy[][]

0

Witam,
mam problem ponieważ nie mam zielonego pojęcia dlaczego mi wyrzuca błąd.

double **macierz = new double *[n]; 
		for(int i = 0; i < n; i++)
			macierz[i] = new double [n];
Ulozenie_macierzy(&macierz n, 0);

alokacja macierzy i wywołanie jej funkcji
teraz funkcja:

void Ulozenie_macierzy(double ***macierz, int n, int rzad) //rzad rowny 0 jak widac w tym przypadku
{
	int rzad_podmieniany = rzad+1;
	double *wektor_temp = new double[n];
	double *wektor_temp2 = new double[n];
	for(int i = 0; i < n; i++)
	{
		wektor_temp[i] = *macierz[rzad][i];       //przez to przechodzi macierz[0][0]
		wektor_temp2[i] = *macierz[rzad+1][i];  //tu się pluje, nie wiem dlaczego skoro przez pierwsze przeszło macierz[1][0]
	}
	for(int i = 0; i < n; i++)
	{
		*macierz[rzad][i] = wektor_temp2[i];
		*macierz[rzad_podmieniany][i] = wektor_temp[i];
	}
}

Wiem, że nie potrzebnie teraz tworzę drugi wektor_temp.. ale stworzyłem go przed chwilą bo myślałem że ma problem z przepisaniem bezpośrednio *macierz[rzad][i] = *macierz[rzad+1][i]; i potem z wektor_tempa do macierz[rzad+1].
I tak.. oczywiście macierz jest rozmiarów co najmniej 2x2, więc nie ma mowy że nie istnieje macierz[1][x].
Jak używam wyświetlania poprzez dwa fory i cout << macierz[i][j] to wszystko jest git, więc dobrze się alokuje i zapełnia.
Unhandled exception at 0x009c1a71 in Gauss.exe: 0xC0000005: Access violation reading location 0xcccccccc.
Może ogólnie źle że przesyłam adres podwójnego wskaźnika? Ale jak wtedy przesłać podwójną tablicę by zmiany były trwałe poza funkcją? Nie chcę używać niczego globalnego.

1

Do funkcji przekazujesz trójwymiarową tablicę or rozmiarze 1 x N x N. Ponieważ operator [] ma wyższy priorytet niż * takim wyrażeniem: *tab[I][J] próbujesz się odwołać do elementu I x J x 1 (zamiast do 1 x I x J), który nie istnieje. Poprawnie powinno być (*tab)[I][J]. W ogóle nie potrzebnie przekazujesz tablicę jako potrójny wskaźnik, wystarczy podwójny (przynajmniej w tym kodzie, który wkleiłeś).

0

Masakra ^^ nie wiem skąd mi się wzięło że inaczej nie podmieni tego jeśli nie prześlę tego jako wskaźnik dodatkowy do wskaźników, a przecież to już są wskaźniki ;p dzięki w każdym razie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1