Zwolnienie pamięci zajmowanej przez tablice dynamiczna

0

Cześć, mam za zadanie zwolnić pamięć zajmowaną przez elementy mojego algorytmu. Czy mógłby ktoś wytłumaczyć mi to pojęcie? Mój program z, którego mam zwolnić pamięć, polega na tym, że jest to metoda, która zwraca wskaźnik do tablicy dynamicznej (dwuwymiarowej). Tu raczej nie dochodzi o "delete" zmiennej w której przechowam wynik algorytmu po wyświetleniu go?

0

Pokaż kod jak tworzysz tablicę

0

int *metoda() {
int ** tablica = new int
[x];
for (int i = 0; i < x; ++i) {
tablica[i] = new int[x+1];
for (int j = 0; j < i; ++j) {
// kod uzupelniajacy
}
}
return tablica;
}

int main() {
int ** out = metoda();
}

0

Zamiast się bawić w brzydki kod usiany problemami, new i delete, użyj jak człowiek kontenerów, np. std::vector.

A do operacji na macierzach n-wymiarowych lepiej użyć ciągłej pamięci i n-wymiarowego widoku niż zagnieżdżonych tablic.

0

Chętnie bym użył vectorów ale akurat mój algorytm został sprawdzony i jest poprawny. Właśnie z niego mam usunąć pamięć wartości.
Czyli jeśli dobrze rozumiem to w mainie np. po wypisaniu elementów stworzyć kolejne dwie pętle i kolejno każdy index delete tab[i][j]; ?

0

Nie wiem na ile kod jest poprawny, bo widzę pewną niekonsekwencję, ale nie mnie w to wnikać. Otóż, jeśli alokujesz w jeden sposób, to zwalniaj w sposób symetryczny, czyli:

for (int i = 0; i < x; ++i) 
{
    delete []tablica[i];
}
delete []tablica;

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