[Jde-dev] Problema "Segmentation fault" accediendo a método de objeto, atributo de una clase

Javier Vazquez javiervazper en yahoo.es
Lun Jun 7 19:30:40 CEST 2010


Gracias David,

parece que era eso. Ya he superado ese punto con la recomendación que me has dado. Cuanto me queda por aprender ... :-)

Miraré lo de RefPrt también.

Un saludo,
Javier.





________________________________
De: David Lobato <dav.lobato en gmail.com>
Para: Javier Vazquez <javiervazper en yahoo.es>
CC: Jde-developers en gsyc.es
Enviado: lun,7 junio, 2010 09:42
Asunto: Re: [Jde-dev] Problema "Segmentation fault" accediendo a método de objeto, atributo de una clase


Hola,
Si eso es un copy&paste de tu código, yo diría que lo que pasa es que estás re-declarando el objeto en el ámbito del constructor:

introrob::introrobcanvas * canvas = new introrob::introrobcanvas();

Cuando lo que deberías estar haciendo es inicializar el miembro de la clase canvas bien en la zona de inicialización con:

Introrob::Introrob() //<- ignoro si la clase se llama así, es un ejemplo
: canvas(new  introrob::introrobcanvas()) {
...
}

o bien dentro del código del constructor con:

...
this->canvas = new introrob::introrobcanvas(); //this-> es opcional
...


Por último te recomiendo que uses la clase RefPtr para manejar punteros, de modo que no tengas que preocuparte por la gestión de memoria.

Espero haberte ayudado,
David.



2010/6/7 Javier Vazquez <javiervazper en yahoo.es>

Hola a todos,
>
>solicito un poco de ayuda con este problema que me está comiendo las tardes enteras sin progreso. Confío en que sea fácil de ver para los que tenéis sobrada experiencia programando en C++.
>
>Contexto del problema:
>Estoy implementando ahora el componente introrob de la 5.0. Existe una clase "introrobgui" para el control de la interfaz gráfica que maneja la aplicación (utilizo también glade para modelar dicha interfaz).
>
>He definido una clase heredada de Gnome::Canvas::Canvas, denominada "introrobcanvas", para la representación de los elementos grid, robot, laser, etc, sobre el área canvas de la ventana. introrobgui delega en introrobcanvas, esta parte de la funcionalidad.
>
>En el código de la clase introrobgui, declaro un atributo objeto de la clase introrobcanvas como:
>
>    introrob::introrobcanvas * canvas;
>
>Posteriormente lo instancio en el constructor de introrobgui como:
>
>    introrob::introrobcanvas * canvas = new introrob::introrobcanvas();
>
>Hasta aquí, todo bien. Adicionalmente, desde el constructor, puedo invocar a métodos heredados o nuevos propios del objeto "canvas", tales
> como :
>
>    canvas->set_center_scroll_region(false);
>    canvas->test(-9000,-9000);
>    vscale1->set_value(canvas->get_pixels_per_unit()*100);
>
>El problema lo encuentro cuando desde un método distinto al contructor de introrobgui, realizo la llamada a cualquiera de estos métodos de canvas. Ahí se produce un fallo  de segmentación. Es decir, lo siguiente me falla:
>
>    bool introrobgui::on_change_value_vscale1(Gtk::ScrollType scroll, double new_value)
>    {
>        printf("vscale1=%.2f\n",new_value/100);
>        canvas->set_pixels_per_unit(0.1);
>    }
>
>
>
>Disculpad mi ignorancia si la respuesta es trivial.
>
>Gracias de antemano,
>Javier.
>
>
>
>
>_______________________________________________
>>Jde-developers mailing list
>Jde-developers en gsyc.es
>http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
>



      
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20100607/30be6a49/attachment-0001.htm 


More information about the Jde-developers mailing list