5672969463

5672969463



4.1. DYNAMICZNA ALOKACJA PAMIĘCI

Powyższe instrukcje jednak zmieniają wartości komórek pamięci reprezentujących dane innych obiektów. Skutki tego działania mogą się objawić w innym miejscu programu, powodując nieprzewidywalne i trudne do wykrycia błędy.

cCiekawostka_

W

Niech t będzie wskaźnikiem na pewien typ. Zauważmy, że zapis t+i nie oznacza koniecznie, że chodzi nam o adres przechowywany w zmiennej wskaźnikowej t plus jeden bajt. Operacja dodawania bierze pod uwagę typ zmiennej wskaźnikowej i dokonuje „przesunięcia” adresu o wielokrotność liczby bajtów, które zajmuje w pamięci jedna zmienna typu typ.

Możemy to sprawdzić np. w następujący sposób.

t ..........>


t [2]

0x9b64e308 t Cl]

0x9b64e304


t[0]

0x9b64e300


(int) 3 (int) 2 (int) 1


int *

t = new

int [3] ;

// u nas int

to

4 bajty

cout

<< t;

//

np.

0x9b64e300 -

to

samo, co

cout «

&t[0];

cout

<< t+1;

//

np.

0x9b64e304 -

to

samo, co

cout «

cout

<< t+2;

//

np.

0x9b64e308 -

to

samo, co

cout «

&t[2]

t[0]

= i;

t [1]

= 2;

t [2]

= 3;

delete [] t;

Kolejne elementy tablicy w pamięci zawsze następują po sobie, co ilustruje poniższy rysunek.

Jesteśmy już gotowi, by napisać fragment programu do sumowania zarobków naszego kolegi. Tym razem nie będziemy zakładać, że liczba miesięcy jest określona z góry. Tutaj będziemy ją wprowadzać z klawiatury, int n;

cout << "Ile miesięcy ? cin >> n;

assert(n>0); // wymaga <cassert>

double* zarobki = new double[n];

for (int i=0; i<n; ++i) {

cout << "Podaj zarobki w miesiącu nr " « i <<

cin >> zarobki [i] ; // to samo, co cin » *( zarobki+i);

y

// tutaj możemy np. wygenerować ładne zestawienie

Ostatnia aktualizacja: 5 grudnia 2012 r.



Wyszukiwarka

Podobne podstrony:
4.1. DYNAMICZNA ALOKACJA PAMIĘCI Rozwiązanie tego problemu może być jednak bardzo czytelnie zapisane
4.1. DYNAMICZNA ALOKACJA PAMIĘCI // wprowadzonych danych itp . for (int i=0; i<n; ++i) cout <&
Spis treści 4.1.    Dynamiczna alokacja pamięci.......................... 1 4.1.1.
4.1. DYNAMICZNA ALOKACJA PAMIĘCI4.1.    Dynamiczna alokacja pamięci4.1.1.
4.1. DYNAMICZNA ALOKACJA PAMIĘCI int x; cout << "x znajduje się pod adresem // np.
4.1. DYNAMICZNA ALOKACJA PAMIĘCI wskx 0xdf590548 - (int*) 0xdf590544 ■(int) 100 •> 0xdf590544
4.1. DYNAMICZNA ALOKACJA PAMIĘCI 1: int x, y; 2: int* w; 0xdf590508- - y 0xdf590504- -x 0xdf590500-
4.1. DYNAMICZNA ALOKACJA PAMIĘCI Przykład z rozdz. 3 (cd.). W poprzednim rozdziale rozważaliśmy funk
4.1. DYNAMICZNA ALOKACJA PAMIĘCI 4.1. DYNAMICZNA ALOKACJA PAMIĘCI A Zapamiętaj Zaalokowany obiekt
III Wyjaśnić pojęcia i konstrukcje programowe związane z dynamiczną alokacją pamięci, opisy umieścić
Nowy 17 161 Z równań powyższych można obliczyć przybliżoną wartość strat w przekładni ślimakowej, je
DSC00753 Rezerwacja obszarów pamięci Wskaźniki służą do dynamicznej alokacji (rezerwacji} tablic. Sł
DSCF2114 (2) 58 58 Charą kt er pola temperatur jest na ogół jednakowy, a zmienia się tylko wartość t
58 58 Charakter pola temperatur jest na ogół jednakowy, a zmienia się tylko wartość temperatur zależ
121DYNAMICZNA ALOKACJA PAMIĘCI Przeanalizujmy teraz po kolei, co <lzieje się w powyższym fragmenc
DSC00757 Dynamiczna alokacja tablic Tablicę likwidujemy instrukcją delete [ ] wsktab; Wynik działani

więcej podobnych podstron