dynamiczny przydzial pamieci wewnatrz funkcji

0

witam. mam taki kawalek kodu:

int *liczba = funkcja(2);

chce aby we wskazniku liczba pojawila sie liczba 2. jak napisac taka funkcje ?
jak ma ona wygladac ?

0
int* funkcja(int x)
{
    int *tmp = new int;
    *tmp = 2;
    return tmp;
}

Tylko musisz pamiętać, żeby zwolnić pamięć jak już nie będzie potrzebna

0

w ktorym momecie programu moge zwolnic pamiec ? w funkcji czy juz poza nia ?

0

Wtedy kiedy już nie będzie Ci potrzebne to co się w niej znajduje.

0

Gdybyś zwolnił pamięć przed zwróceniem wskaźnika, to zwróciłbyś wskaźnik wskazujący na śmieci. Co prawda pewnie dalej byłaby tam wartość 2, ale na tym polegac nie możesz. Zwolnić pamięć musisz po tym, jak już nie będzie Ci ta zmienna potrzebna.
Podejście takie, pomimo, że czasami konieczne, nie jest najlepszym pomysłem, bo łatwo zapomnieć o tym feralnym delete, szczególnie jeżeli z niewyjaśnionych przyczyn zapomnimy wyraźnie udokumentować takiego obowiązku. Sprytny wskaźnik załatwia jednak ten problem. ;)

int* p = f(2); // f() alokuje pamięć, na Ciebie spada obowiązek jej zwolnienia
delete p;
p = f(3);
delete p;

p = f(4);
p = f(5);// ups! wyciek pamięci. ;)
delete p;

A jak to zrobić ze sprytnym wskaźnikiem? To zadanie domowe dla Ciebie. :P

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