[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Pregunta técnica sobre C



El dom, 23 abr 2000, Santiago Romero escribió:

> > Pero es que tiene punteros y punteros a punteros, y el sizeof() no puede
saber > > el tamano de un vector (punteros de punteros) dinámico. Eso funciona,
pero es > > muy probable que de un core en un momento dado, ya que no reservas
toda la > > memoria que necesitas.
> 
>  creo que si que funcionaria: con memcpy copias EL PUNTERO, la direccion,
>  tu interes NO es copiar EL CONTENIDO: al copiar el puntero puedes acceder
>  al contenido. SI coges un puntero (o puntero a puntero) y lo metes en
>  otro sitio, eso te sigue permitiendo acceder a la posicion de memoria
>  apuntada. No se si me explico: tu al copiar la estructura vas a dejar en
>  el destino los mismos valores que tienen los campos origen, entre ellos
>  el valor del puntero que apunta a un array de punteros. Con ese puntero
>  DESDE EL DESTINO sigues pudiendo acceder al array de punteros, ¿no? :)

He aquí la cuestion, my dear friend: yo quiero duplicar toda esa información,
ya que sino, al modificar una cosa apuntada por un puntero, se modifica también
en el otro lado. Bueno la verdad es que es la misma información al apuntar los
dos punteros al mismo sitio. Vaya galimatías!!. 

Todo este embrollo viene a colación de que la función gethostbyname() devuelve
un puntero estático a una estructura del tipo hostent. Y este es el problema,
que es un puntero estático y siempre apunta al mismo sitio. Si haces un
gethostbyname() de dos nombres de hosts seguidos, la segunda llamada a la
función machaca lo generado por la primera. Para descubrir que esto pasaba
porque así está hecho y no por un puntero perdido mio, pues me he pasado un
ratito muy agradable, depurando en busca de un error inexistente :-)

Es que estoy haciendo una estructura de clases en C++ parecida a la de Java.
Obviamente hay una parte muy pequeña implementada, pero está chulo. He hecho
también una clase Socket para las comunicaciones y funciona correctamente.
Después tocará una clase POP3 para trabajar con servidores POP3 y otra SMTP
para los servidores SMTP. Creo que está quedando bien y muy simple de utilizar.
Programa mucho en Java y la verdad es que es muy cómodo, pero muy lento. Y una
buena jerarquía de clases hecha en C++ haría ganar mucho a este lenguaje. Lo de
los templates me parece una aberración en un lenguaje orientado a objetos.
Cuando tengo algo más, igual pido colaboración a la gente, porque para uno solo
creo que es una labor titánica. 

Con todas esas clases, desarrollar aplicaciones sería mucho más sencillo y
rápido. Con los lenguajes orientados a objeto se consigue un nivel muy bueno de
modularidad y un código muy limpo, claro y reutilizable. No me gusta hacer
proyectos grandes en C porque luego te vuelves loco para encontrar los fallos o
para ampliar funcionalidades. En mi opinión se programa más rápido y fácil en
un lenguaje orientado a objetos, si tiene buenas clases. 

Si se hiciera algo como lo que yo quiero para C++ y se extendiera, crecerían
los programas para Linux, y su calidad.

>  Vamos, a lo mejor me estoy rayando, pero yo creo que es asi :?

No te estás colando, es correcto lo que dices, pero con la salvedad de que yo
SI quiero DUPLICAR esa información.

>  Imagina el ejemplo
> 
>  struct {
>             int *puntero;
> 	     } a, b;
> 
> 
>  si a.puntero apunta a 1234; al copiar en b la estructura a,
>  b.puntero contendrá el mismo valor y apuntará al mismo lugar.
>  Si en lugar de ser un solo puntero es **, como el ** apunta
>  a vector[0], sigue siendo el mismo tamaño.

Claro, pero si modifico "a.puntero", también afecta a "b.puntero", y en mi caso
esto no es deseable.

-- 
-----------------------------------------------------------------------------

 * Multitarea: posibilidad de que dos bugs ocurran simultaneamente.

-------------
                      Registered Linux user number 134.596

 E-mail: monkiki@teleline.es                     Powered by Debian 2.1 slink
-----------------------------------------------------------------------------


Reply to: