• [ Pobierz caÅ‚ość w formacie PDF ]

    zwraca wskaznik do obszaru mogacego pomieścic tablicę n elementową, każdy element ma rozmiar size.
    Zwraca NULL, gdy pamięć nie może być przydzielona. Pamięć inicjowana jest zerami.
    Po wykorzystaniu pamięci można ją zwolnić. Do tego celu służy funkcja free
    void free(p);
    zwalnia pamięć wskazaną przez p, przy czym p musi być wynikiem wcześniejszego wywołania funkcji
    malloc lub calloc. Nie ma ograniczeń na kolejność zwalniania pamięci, natomiast poważnym błędem jest
    zwalnianie czegoś, co nie było poprzednio przydzielone w/w funkcjami.
    Zadaniem naszym będzie dynamiczne alokowanie struktury o nazwie "data":
    struct date *dateptr;
    dateptr = (struct date *) malloc(sizeof(struct date));
    W przykładzie tym, funkcja malloc alokuje blok pamięci wystarczający do przechowania struktury i zwraca
    wskaznik. Funkcja zwraca void pointer i dlatego jak pamietamy musimy go rzutować na odpowiedni typ
    kiedy chemy przypisać go do zmiennej dateptr. Po tej operacji blok pamięci możemy traktować jako
    strukturÄ™ date.
    W języku C możemy korzystać z jednego z 6 standardowych modeli pamięci:tiny, small, medium,compact,
    large, huge ktore różnia się min. ilościa pamięci przeznaczonej na dane.Dla modelu compact, large i hudge,
    gdzie pamięć na dane jest ponad 64 kB, funkcja malloc zamienia na jest na funkcję farmalloc, farfree
    operujące na pamięci o długości ponad 1 segment.
    Alternatywą do tych funkcji w języku C++ jest operator new i delete. Operator new tworzy obiekt, a
    operator delete usuwa obiekt z pamięci. Jeśli zdefiniujemy wskaznik:
    char *wsk;
    to instrukcja
    wsk = new char;
    powoduje utworzenie nowego obiektu typu char. Nie ma on nazwy, ale możemy sie do niego odwoływać
    poprzez wskaznik zawierajÄ…cy adres tego obiektu.
    Natomiast:
    delete wsk;
    powoduje usunięcie obiektu wskazanego przez wsk z pamięci.
    Jeśli chcemy utworzyć tablice w pamięci to postępujemy następująco:
    int *wsk_tab;
    wsk_tab = new int[10];
    operator new utworzył 10-elementowa tablicę int. Kasowanie tablicy zarezerwowanej dynamicznie:
    delete [] wsk_tab;
    Zwróćmy uwagę na nawiasy kwadratowe.
    Cechy obiektów utworzonych operatorem new
    1. obiekty żyją od momentu utworzenia operatorem new aż do momentu usunięcia operatorem delete
    2. obiekty nie mają nazwy. Operujemy na nich tylko przy pomocy wskazników.
    3. obiekty utworzone operatorem new nie są automatycznie inicjowane (są w nich śmieci)
    Przykład 3;
    #include
    main()
    {
    int dl_tab,i;
    cout
    cin>>dl_tab;
    int *wsk_tab = new int[dl_tab];
    for(i = 0;i
    *wsk_tab++ = i;
    //.......instrukcje wykorzystujÄ…ce tablice
    delete [] wsk_tab;
    return 0;
    }
    Za pomoca operatora delete kasuje siÄ™ tylko obiekty utworzone przy pomocy operatora new, przy czym nie
    należy kasować wczesniej skasowanego obiektu. Można kasować natomiast wskaznik ustawiony na NULL:
    wsk = NULL;
    delete wsk;
    W trakcie alokowania pamięci może zdarzyć się tak, że operator new zwróci NULL. Oznacza to, że
    wyczerpaliśmy pamięć dostępną na dane. W związku z tym w programach tworzących dużą liczbę dużych
    obiektów należy kontrolować poprawność operacji alokacji. Można tego dokonać albo poprzxez fragment
    programu:
    int *wsk;
    wsk = new int[10000];
    if(!wsk)
    error("pamięć się wyczerpała");
    lub przy wykorzystaniu funkcji set_new-handler:
    Przykład 4.
    #include
    #include
    #include
    void alarm();
    long k;
    main()
    {
    set_new_handler(alarm);
    for(k = 0; ; k++)
    new int;
    }
    void alarm()
    {
    cout
    exit(1);
    }
    W funkcji main wykonuje się nieskończona pętla tworząca dynamicznie obiekty. Jeśli w którymś momencie
    zabraknie pamięci, sterowanie przejmuje automatycznie funkcja set_new_handler uruchamiająca funkcję
    alarmową napisaną przez użytkownika. Argumentem tej funkcji jest wskaznik do funkcji alarm (dalej
    dowiemy sie, że nazwa funkcji jest jej adresem w pamięci).
    Porównanie strych i nowych metod
    - uniezalezniamy się od modelu pamięci
    - w momencie kreacji obiektu własnego typu (klasy) uruchamiana jest specjalna funkcja nazwana
    konstruktorem ( nie ma tego przy wywolaniu funkcji malloc),
    - przy kasowaniu delete uruchamiany jest automatycznie destruktor
    O szcegółach mówić będziemy przy okazji omawiania w przyszłym semestrze dynamicznej alokacji
    obiektów zdefiniowanej przez programistę klasy.
    1.h Stale wskazniki i wskazniki do stałych
    Zadeklarujmy wskaznik:
    char *const text = "to jest proba tekstu"; [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • matkadziecka.xlx.pl