[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