dynam

















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 dynam
p dynam
C Cpp03 zm dynam przeciazanie
Sila el dynam
DYNAM (2)
Sila el dynam wzk
AN DYNAM

więcej podobnych podstron