Usuwanie tablicy 2d w metodzie

0

Witam. Mam problem z usuwaniem tablicy dwuwymiarowej dynamicznej w funkcji. Z nieznanych mi powodów w mainie wszystko pięknie się zwalnia (chyba, bowiem nie wiem jak sprawdzić czy na pewno się zwolniło - jakby jakaś dobra duszyczka podała sposób, to byłbym wdzięczny), aczkolwiek już w metodzie niezbyt. Poniżej umieszczam fragment kodu odpowiedzialny za to.

void deleteArray(int n, int** a){
	for(int i=0; i < n; i++){
		delete[] a[i];
	} delete[] a;
}

Próbowałem również zwalniać na kilka innych sposobów i niestety nic. Obstawiam, że popełniam jakiś głupi, banalny błąd, ale siedzę już od jakiegoś czasu i nic nie jestem w stanie wymyślić. Byłbym więc bardzo wdzięczny za pomoc!

0

aczkolwiek już w metodzie niezbyt

To jest funkcja, nie metoda :P
Skąd wiesz, że się nie zwalnia?

0

To jest funkcja, nie metoda :P

Faktycznie, cały czas odruchowo stosuję te dwa słowa zamiennie. Mój błąd. :p

Skąd wiesz, że się nie zwalnia?

Nie jestem pewien, tak mi się zdaje, aczkolwiek, gdy próbuję w mainie wyświetlić ponownie ów tablicę po wywołaniu funkcji, to dla array[0][x] i array[1][x] wyświetlają się faktycznie dziwne liczby, ale dla reszty już całkowicie normalne.

1

gdy próbuję w mainie wyświetlić ponownie ów tablicę po wywołaniu funkcji

1.ową, bo masz tę tablicę, a nie ten.
2.Odwoływanie się do nieistniejącego wskaźnika to UB (undefined behaviour) - może się zdarzyć/zwrócić/ustawić cokolwiek.

dla array[0][x] i array[1][x] wyświetlają się faktycznie dziwne liczby, ale dla reszty już całkowicie normalne.

Przypadek. Zwolnienie pamięci nie powoduje automatycznie jej nadpisania w żaden sposób*, więc najwyraźniej coś w międzyczasie akurat alokuje tyle pamięci, ile zajmują dwa elementy tablicy, i nadpisuje te dane swoimi.

* w większości znanych mi implementacji menedżerów pamięcią; nie mam pojęcia czy standard C++ coś mówi w tej kwestii - prawdopodobnie nie, bo i kogo obchodzi już zwolniona pamięć.

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