Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dinamička alokacija, proširenje polja

[es] :: C/C++ programiranje :: Dinamička alokacija, proširenje polja

[ Pregleda: 2217 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dr.lijenjin

Član broj: 160268
Poruke: 2
*.tel.net.ba.



Profil

icon Dinamička alokacija, proširenje polja19.10.2007. u 14:43 - pre 201 meseci
Drugi primjer s ovog linka: http://www.fredosaurus.com/notes-cpp/newdelete/55dynexample.html

Code:
int max = 10;           // no longer const
int* a = new int[max];  // allocated on heap
int n = 0;

//--- Read into the array
while (cin >> a[n]) {
    n++;
    if (n >= max) {
        max = max * 2;            // double the previous size
        int* temp = new int[max]; // create new bigger array.
        for (int i=0; i<n; i++) {
            temp[i] = a[i];       // copy values to new array.
        }
        delete [] a;              // free old array memory.
        a = temp;                 // now a points to new array.
    }         
}
//--- Write out the array etc.


Pitanje - Zašto ovo kompajla bez warninga ili errora?

Isto tako, manja modifikacija tog koda:
Code:
int max = 10;
int* a = new int[max];
int n = 0;

while (cin >> a[n]) {
    n++;
    
}


Ovo radi i nakon što je n = 9. On dakle ide van deklariranog polja i bez problema piše u memoriju koja nije njegova? Jel mi može neko pojasnit malo kako i zašto ovo funkcionira? Neće li biti opasnosti od koruptiranja podataka koje ovako zapišemo u nealociranu memoriju, nakon što je n = 9?
Every spam is sacred, every spam is great!
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.vlayko.co.yu.



+1 Profil

icon Re: Dinamička alokacija, proširenje polja19.10.2007. u 15:06 - pre 201 meseci
Jeste opasnost, na tebi je da paziš, C++ te ne ograničava da pišeš van rezervisane memorije.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

dr.lijenjin

Član broj: 160268
Poruke: 2
*.tel.net.ba.



Profil

icon Re: Dinamička alokacija, proširenje polja19.10.2007. u 15:24 - pre 201 meseci
Dobro, ali ako isto to umjesto u while stavim u for petlju koja se vrti više od 10 puta, svejedno mi ne baca nikakve warninge. U tom slučaju je kompajleru lako determinirati da će biti overflowa... Ili nije?
Every spam is sacred, every spam is great!
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.18.eunet.yu.



+1 Profil

icon Re: Dinamička alokacija, proširenje polja19.10.2007. u 17:59 - pre 201 meseci
Kompajler može da izbaci upozorenje (a i ne mora, zavisi od kompajlera) ali grešku neće, jer sam jezik to dozvoljava.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

[es] :: C/C++ programiranje :: Dinamička alokacija, proširenje polja

[ Pregleda: 2217 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.