[C con Clase] Redefinir un arreglo dinamico

Steven Davidson srd4121 en njit.edu
Mie Mayo 27 18:56:44 CEST 2009


Hola Kalith,

Kalith wrote:
> pero osea no hay forma de hacerlo en el mismo arreglo sin necesidad de 
> usar uno extra?
> 

Sí existe una forma, pero tienes que usar las funciones estándares de 
ANSI C. Te interesa la función 'realloc()'. Esta función te garantiza 
que los elementos originales no serán borrados si aumentas el tamaño de 
la memoria de tal bloque. Por ejemplo,

int *ptr = (int *) realloc( 0, n );  // igual que 'malloc()'
...
ptr = (int *) realloc( ptr, ++n );
...
free( ptr );

En C++, puedes intentar usar el operador 'new' con colocación. Por ejemplo,

int *ptr = new int[n];
...
ptr = new(ptr) int[++n];
...
delete[] ptr;

Debo decir que no lo he probado, pero teóricamente esto debería 
funcionar. Si no estoy equivocado, creo que tienes que #incluir el 
fichero <new>. Si funciona correctamente, tampoco puedo asegurar que la 
información original permanezca.


Espero que esto te sirva.

Steven





Más información sobre la lista de distribución Cconclase