Memoria dinámica
Esta semana hemos visto el uso de memoria dinámica, que básicamente consiste en dominar los operadores new y delete.
La potencia de esta aproximación que se aprecia sobre todo en los
vectores, de manera que es posible crear vectores cuya longitud varía
cuando se ejecuta el programa de una vez a otra:
int main()
{
int * v;
int numElementos;
int total = 0;
cout << "Introduzca el nº de elementos: ";
cin >> numElementos;
v = new(nothrow) int[ numElementos ];
if ( v == NULL ) {
cerr << "Sin memoria para " << numElementos << endl;
exit( -1 );
}
for( int i = 0; i < numElementos; ++i) {
cin >> v[ i ];
total += v[ i ];
}
cout << "La media es: " << total / numElementos << endl;
cout << "Los valores eran:" << endl;
for( int i = 0; i < numElementos; ++i) {
cout << v[ i ] << endl;
}
delete[] v;
}
El
parámetro nothrow en el operador new indica que new devolverá NULL como
valor cuando no haya memoria suficiente para satisfacer la reserva. Si
no se pone, lanzará una excepción, concepto que todavía no se ha
estudiado.