pamiec dynami




[ Code Zone ] - Serwis programistyczny - C/C++





















  Strona główna
| Język C++ | C++
Builder | Programy
| Narzędzia
| Forum | Księga
gości | Sznurki | Kontakt








Dynamiczna alokacja pamięci





Sposoby opisane poniżej służą do rezerwowania
określonych obszarów pamięci dla wskaźników. W języku C były używane
funkcje malloc i free, a wraz z C++ otrzymujemy o
niebo lepsze i prostsze w użyciu operatory new i
delete. Poniżej dwa słowa o ich użyciu.

Użycie operatorów "new" i "delete"

Operator new rezerwuje pamięć dla wskaźnika,
zwracając jego adres. Użycie w najprostszym z przypadkow wygląda
tak:

wskaznik = new typ_wskaznika;

Czyli np.

int * liczba; //deklarujemy
wskaźnikliczba = new int; //przydzielamy pamięć*liczba = 10; // i działamy na wskaźniku korzystając z
dereferencji

Jesli mamy do czynienia z wskaźnikami na klasy, posiadające konstruktory
wymagające podania argumentu, to podajemy go w nawiasach po
operatorze new i typie klasy tzn.

TButton * przycisk;przycisk = new
TButton(Form1);

Można to wszystko zrobić w jednym poleceniu:

TButton * przycisk = new TButton(Form1);


Aby po zakończeniu pracy ze wskaźnikiem zwolnić
przydzieloną pamięć korzystamy z operatora delete. Np.

delete przycisk;

Lub w bezpieczniejszy sposób, sprawdzając czy pamięć
mu zarezerwowana nie została już zwolniona:

if (przycisk) delete przycisk;

Tworzenie dynamicznych tablic

Innym zastosowaniem operatorów new i
delete jest tworzenie dynamicznych tablic,
czyli takich, których rozmiar nie musi być zdefiniowaną stałą.
Użycie w przypadku jednowymiarowej tablicy wygląda tak:

wskaznik = new typ_wskaznika [rozmiar];

Czyli żeby stworzyć tablicę składającą się ze 100
intów napiszemy:

int * liczby = new int [100];


Odwołujemy się do nich jak do standardowej tablicy
tj.:

liczby[50] = 6;

Aby zwolnić pamięć zajmowaną przez całą
tablicę napiszemy:

delete [] liczby;

Nigdy tak:

delete liczby;

Jesli byś tak zrobił, to - jako, że nazwa tablicy
jest wskaźnikiem na jej pierwszy element - zwolniła by się pamięć
zajęta tylko przez pierwszy element, a pozostałe 99 intów zostało by
w pamięci!

Uwaga!

Każdemu wystąpieniu operatora new w programie
musi odpowiadać jedno - nie mniej, ni więcej - wywołanie operatora
delete (istnieją wyjątki w BCB w przypadku dynamicznego
tworzenia komponentów, gdyż forma samemu wywołuje desktruktory
kontrolek, których jest właścicielem). Niezwolnienie alokowanej
pamięci lub zwolnienie tylko fragmentu tablicy przez program
powoduje stałe zaleganie danych i zajmowanie cennych zasobów. Taką
kaszanę robi niestety wiele programów pod Windows napisanych przez
bardzo nieuważnych programistów.



WhiteRAVEN,
18.06.2001


Wyszukiwarka

Podobne podstrony:
F2 66 Pamięci dynamiczne
W11 dynamiczna alokacja pamieci
10 Dynamiczne przydzielanie pamieci
05 Dynamiczne przydzielanie pamięci
Dynamiczne przydzielanie pamięci metodą stref nieprzesuwalnych
W08 dynamiczna alokacja pamieci
Sprawdź swoją pamięć A4
2 Dynamika cz1
,Modelowanie i symulacja systemów, Model dynamiczny
Kinematyka i Dynamika Układów Mechatronicznych
C w6 zmienne dynamiczne wskazniki funkcji
uczenie sie i pamiec
Zimowym rankiem w Edo pamięci 47 roninów
pamiec (3)

więcej podobnych podstron