El siguiente programa, le pregunta al usuario que indique la cantidad de memoria que se requerirá y luego dinámicamente se solicita esa cantidad de memoria: #include <iostream.h> void main(void) { int size; char *pointer; cout << "Introduce el tamaño del arreglo hsta 30000: "; cin >> size; if (size <= 30000) { pointer = new char[size]; if (pointer != NULL) cout << "Memoria asignada" << endl; else cout << "No se pudo asignar memoria" << endl; } } El siguiente programa, demanda memoria para 10,000 caracteres en repetidas ocasiones hasta que new no puede obtener mas memoria del almacenamiento libre. Cuando el programa tiene éxito despliega un mensaje y otro cuando falla al pretender obtener la memoria: #include <iostream.h> void main(void) { char *pointer; do { pointer = new char[10000]; if (pointer != NULL) cout << "Allocated 10,000 bytes" << endl; else cout << "Memory allocation failed" << endl; } while (pointer != NULL); } El siguiente programa, demanda memoria para almacenar un arreglo de 1,000 enteros. Luego el programa asigna los números del 1 al 1,000 al arreglo desplegando los valores en la pantalla. Luego, el programa libera la memoria y demanda 2,000 lugares para un arreglo de números de punto flotante, asignando los números del 1.0 al 2000.0, como se muestra a continuación: #include <iostream.h> void main(void) { int *int_array = new int[1000]; float *float_array; int i; if (int_array != NULL) { for (i = 0; i < 1000; i++) int_array[i] = i + 1; for (i = 0; i < 1000; i++) cout << int_array[i] << ' '; delete int_array; } float_array = new float[2000]; if (float_array != NULL) { for (i = 0; i < 2000; i++) float_array[i] = (i + 1) * 1.0; for (i = 0; i < 2000; i++) cout << float_array[i] << ' '; delete float_array; } } los operadores new y delete son propios de C++. En C se usan las funciones malloc y free para reservar y liberar memoria dinámica. Veamos algunos ejemplos: int main() { char *c; int *i = NULL; float **f; int n; c = new char[123]; // Cadena de 122 caracteres f = new float *[10]; // Array de 10 punteros a float (1) // Cada elemento del array es un array de 10 float for(n = 0; n < 10; n++) f[n] = new float[10]; (2) // f es un array de 10*10 f[0][0] = 10.32; f[9][9] = 21.39; c[0] = 'a'; c[1] = 0; // liberar memoria dinámica for(n = 0; n < 10; n++) delete[] f[n]; delete[] f; delete[] c; delete i; return 0; }