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.
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++;
}
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!