[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