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?
Zwolnienie pamięci zajmowanej przez tablice dynamiczna
- Rejestracja: dni
- Ostatnio: dni
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();
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
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.
- Rejestracja: dni
- Ostatnio: dni
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]; ?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Łódź
- Postów: 1405
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;