[ dr.lijenjin @ 19.10.2007. 14:43 ] @
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?
[ karas @ 19.10.2007. 15:06 ] @
Jeste opasnost, na tebi je da paziš, C++ te ne ograničava da pišeš van rezervisane memorije.
[ dr.lijenjin @ 19.10.2007. 15:24 ] @
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?
[ karas @ 19.10.2007. 17:59 ] @
Kompajler može da izbaci upozorenje (a i ne mora, zavisi od kompajlera) ali grešku neće, jer sam jezik to dozvoljava.