[C con Clase] DUDA CONTENEDOR

David fire ddfire en gmail.com
Mar Jun 23 20:18:56 CEST 2009


creas el objeto en el heap....

MiContenedor Lista()
{
   MiContenedor *MC;
   MC=new MiContenedor();
   ...
   return MC;
}


asi la variable no se destruye despues que termina la funcion.
eventualmente tenes que destruir esa variable o te vas a quedar sin memoria.
memory leak se llama.
David

El 23 de junio de 2009 15:09, Pedro Rodríguez González <
sr.whiteskull en hotmail.com> escribió:

>  Gracias David y gracias a Steve...
>
> FUNCIONA SIN PROBLEMAS!!!
>
> MiContenedor Lista()
> {
>    MiContenedor MC;
>    ...
>    return MC;
> }
> ...
> pero y si quisiera que me devolviera una referencia sin pasarle un argumento
> ...
>  MiContenedor& Lista( /* MiContenedor &MC */ )
>  {
>     ...
>     return MC;
>  }
>
> ...
> ...
> Queda otra opción, alguna idea? de todas formas escapo con ese arreglo...
> pero lo ideal sería lo segundo propuesto
>
> > Date: Tue, 23 Jun 2009 13:34:24 -0400
> > From: srd4121 en njit.edu
> > To: cconclase en listas.conclase.net
> > Subject: Re: [C con Clase] DUDA CONTENEDOR
>
> >
> > Hola Pedro,
> >
> > Pedro Rodríguez González wrote:
> > > Que tal de nuevo, pues aquí con nuevas dudillas! Resulta que éste
> > > ejercicio debe devolver un tipo de contenedor, usando un conjunto
> > > asociado tipo map, MiContenedor, todo funciona bien aparentemente,
> > > pero el problema es que me da fallo de segmentación al intentar
> > > extraer un atributo de una clase contenida, mis sospechas apuntan a
> > > éste método, alguien me puede aportar algún detalle para mejorar el
> > > susidicho método...
> > >
> >
> > Veamos el código fuente que interesa.
> >
> > > ...
> > > ...
> > > MiContenedor& Lista()
> > > {
> > > MiContenedor MC,*pMC=&MC;
> > >
> > > ... // inserto clave y datos a MC por medio de "iteratores"
> > > ...
> > >
> > > return *pMC;
> >
> > Aquí está el problema. Estás retornando la referencia a un objeto local
> > a esta función. Recuerda que las variables son eliminadas al terminar el
> > ámbito en que fueron creadas. Por consiguiente, tanto 'MC' como 'pMC'
> > serán eliminadas al retornar de esta función.
> >
> > Deberías retornar un objeto nuevo. Por ejemplo,
> >
> > MiContenedor Lista()
> > {
> > ...
> > return MC;
> > }
> >
> > Con esto, retornamos el objeto 'MC', pero un nuevo objeto es instanciado
> > y 'MC' es copiado a tal objeto temporal.
> >
> > Otra solución es pasar el objeto como parámetro a 'Lista()'. De esta
> > manera, el objeto existirá fuera de esta función. Por ejemplo,
> >
> > MiContenedor& Lista( MiContenedor &MC )
> > {
> > ...
> > return MC;
> > }
> >
> > Así, sí podemos retornar una referencia a un objeto ya instanciado,
> > porque tal objeto existe antes y después de ejecutar esta función. Por
> > lo tanto, la referencia es correcta.
> >
> >
> > Espero haber aclarado la duda.
> >
> > Steven
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
> ------------------------------
> Explore the seven wonders of the world Learn more!<http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090623/17a330c1/attachment.html>


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