On Sat, 22 Apr 2000, Francisco Jos� Avila Bermejo wrote:
> �C�mo copiarias una estructura con esto campos?

M�s o menos como indicabas.

>   // Copiamos la lista de alias
>   ptr = tmp->h_aliases;
>   ia->h->h_aliases = new char*[16];

Eso es muy peligroso. Nadie te dice que van a ser 16 alias, y o te pasas o
te quedas corto. Usar arrays de n�mero fijo no va a darte m�s que
problemas.

>   while (*tmp->h_aliases) {
>     *ia->h->h_aliases = new char[strlen(*tmp->h_aliases)+1];
>     strcpy(*ia->h->h_aliases++, *tmp->h_aliases++);

Es muy sospechoso hacer el *tmp->h_aliases++, quiz�s de problemas
internamente si en la siguiente llamada el sistema quiere liberar esa
memoria usando el puntero ese. Yo que tu no modificar�a el valor, y usar�a
una variable para acceder a los diferentes punteros.

>   // Copiamos la lista de direcciones
>   ia->h->h_addr_list = new char*[1];

Igual que antes, no sabes cu�ntos va a haber.

Aparte de eso, la estructura duplicada no va a ser ex�cta, porque tus
arrays de punteros a cadenas no acaban en un puntero NULL. Si luego
intentas pasar esa copia a alguna funci�n que dependa de ese NULL, lo
llevas crudo, podr�a cascar, especialmente con la lista de direcciones
donde ni si quiera reservas espacio para m�s de un puntero, y eso que
siguiendo la suposici�n de que todas las estructuras van a tener al menos
una direcci�n el m�nimo tendr�a que ser dos punteros, el segundo a NULL.

> �No habr�a una forma m�s f�cil?

No, �pero es dif�cil?
-- 
  Grzegorz Adam Hankiewicz      -            [EMAIL PROTECTED]
    http://glub.ehu.es/         -     http://welcome.to/gogosoftware/

Responder a