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/