[C con Clase] DUDA CONTENEDOR

Steven Davidson srd4121 en njit.edu
Mar Jun 23 19:34:24 CEST 2009


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





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