Pamięć przydzielana dynamicznie
Pamięć przydzielana dynamicznie
Czasami istnieje taki problem że nie wiemy ile pamięci będzie nam potrzebne. Na przykład mamy napisać program do sortowania x liczb. Do tego najlepiej nadaje się tablica. Ale żeby zadeklarować tablicę musimy wiedzieć jaki ma być jej rozmiar jeszcze przed skompilowaniem programu. W tedy musimy określić jej górną granicę, a nie musimy jej całej wykorzystywać. Ale pojawiają się na dwa aspekty: po pierwsze co zrobić gdy potrzebujemy większą tablicę niż mamy? i po drugie jeżeli wykorzystujemy 10 elementów z 10000 to jest to lekkie marnotractwo.
New
C++ daje nam dość proste rozwiązanie tego problemu. Najpierw pytamy się o liczbę elementów tablicy, a następnie tworzymy sobie tablicę x wymiarową, jeżeli tylko nam na to pozwala pamięć. Służy do tego operator new.
Deklaracja takich zmiennych wygląda troszeczkę inaczej niż deklaracja zwykłych zmiennych. Deklaruje się wskaźnik do pamięci przydzielonej dynamicznie.
int *zmienna1 = new int;
char *zmienna2 = new char[rozmiar];
W pierwszym przykładzie zadeklarowaliśmy sobie wskaźnik do obszaru pamięci o rozmiarze zmiennej int. Czyli po prostu przydzieliliśmy sobie pamięć dynamicznie. Natomiast w drugim przypadku zadeklarowaliśmy sobie nową tablicę której rozmiar znamy dopiero podczas wykonywania programu. Jest tutaj pewne niebezpieczeństwo. Trzeba się pilnować żeby nie odczytywać z elementu tablicy którego nie zadeklarowaliśmy. Np deklarujemy 7 elementów tablicy a odczytujemy 10. Czytamy w tedy po prostu pamięć która jest zaraz po naszej tablicy. Jeszcze gorzej jest z takim zapisem! Coś takiego może prowadzić w najlepszym przypadku do nieprawidłowego działania programu.
Dobrze ale mówiliśmy o tablicy jednowymiarowej. No a my potrzebujemy tablicę dwu wymiarową. Wpisując:
int wskaźnik = new int[12][12];
Kompilator najzwyczajniej wykaże nam błąd. Niestety takie przypisanie nie jest możliwe. Jednak dla nas programistów nie jest to rzeczą nie do ominięcia. Musimy to zrobić ręcznie. Można sobie zdefiniować tablicę n1 wymiarową z wskaźnikami typu int a tym wskaźnikom w tablicy przypisać nowe tablice typu int.Zróbmy to w ten sposób:
void main()
{
int **wsk;
int n1=5,n2=6;
wsk=new int*[n1];
for(int i=0;i
Wyszukiwarka
Podobne podstrony:
6 ŁSkłodowski mosty dynamp dynamC Cpp03 zm dynam przeciazanieSila el dynamDYNAM (2)Sila el dynam wzkAN DYNAMwięcej podobnych podstron