[C con Clase] duda con cadenas en C

Programante programante en gmail.com
Vie Dic 21 23:18:52 CET 2007


Steven Richard Davidson escribió:
> 1. Crear un array de 10 punteros. Vamos creando cada array dinámico y
> asignándolo a cada puntero. Sin embargo, vamos recreando cada array
> dinámico si necesitamos más espacio. Por ejemplo,
>
> char *pLista[10] = { 0 };
> unsigned int n = 0;
>
> for( ... )
> {
>   n = 0;
>   do
>   {
>     n++;
>     pLista[i] = (char *) realloc( pLista[i], n );
>     pLista[i][n-1] = getchar();
>   } while( !isspace(pLista[i][n-1]) );
>   pLista[i][n-1] = 0;  // carácter nulo
> }
>
> Esto es algo costoso porque 'realloc()' está readjudicando memoria
> continuamente.
¿Lo hace realmente?
Normalmente* malloc() reserva el espacio en potencias de 2, de forma que 
al llamar a realloc() con una unidad mayor la mayor parte de las veces 
ya tendríamos reservado más y volvería inmediatamente. Sólo tendría que 
reservar-copiar-liberar en las potencias de 2.

*Depende por completo de la implementación, consulta el manual de tu 
librería de C.





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