[C++] Zwalnianie pamięci tablicy w funkcji

Lustrza
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 12 mar 2016, o 12:21
Płeć: Kobieta
Lokalizacja: Warszawa

[C++] Zwalnianie pamięci tablicy w funkcji

Post autor: Lustrza »

Hej, jestem na samym początku swojej drogi z programowaniem, więc zdaje sobie sprawę z tego, że moje pytanie może wydać się dla niektórych banalne, ale proszę o wyrozumiałość.

Otóż, w czym problem? Piszę program w którym mam wylosować liczbę z podanego przedziału i ma być pierwsza. Używam do tego sita Eratostenesa i choć sam algorytm powiedzmy, że działa, jest on napisany w funkcji poza funkcją main i zwraca wartość logiczną. Tworzę w tej funkcji nową tablicę na wyselekcjonowane liczby pierwsze i nie wiem, gdzie mam zwolnić pamięć takiej tablicy. Ale może przejrzyściej pokaże to przykład:

Kod: Zaznacz cały

bool czyPierwsza(int x)
{

     int* tab=new int[r];

     [...] // Różne działania

     if(tab[x]==1)
     {
          return true;
     }
     else
     {
          return false;
     }

}

int main()
{


    cin.get();
    return 0;
}
Moje pytanie brzmi gdzie mam zwolnić tablicę tab? Jeżeli zrobię to po "return true/false" nie będzie to miało żadnego sensu, podobnie gdy zrobię to przed return. Z oczywistych względów nie mogę tego również zrobić w funkcji main, więc gdzie?

Z góry dziękuję za wszelką pomoc.
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] Zwalnianie pamięci tablicy w funkcji

Post autor: bartek118 »

Przed instrukcją if zapisujesz sobie odpowiednią wartość: int result = tab[x], potem zwalniamy pamięć, a if robimy już na zmiennej result.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10225
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2362 razy

[C++] Zwalnianie pamięci tablicy w funkcji

Post autor: Dasio11 »

Lustrza pisze:Jeżeli zrobię to po "return true/false" nie będzie to miało żadnego sensu, podobnie gdy zrobię to przed return.
Czemu? Przed return jest OK.
ODPOWIEDZ