[Jde-dev] Problema "Segmentation fault" accediendo a método de objeto, atributo de una clase
David Lobato
dav.lobato en gmail.com
Lun Jun 7 18:42:32 CEST 2010
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<http://library.gnome.org/devel/glibmm/unstable/classGlib_1_1RefPtr.html>
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/b3b6df40/attachment.htm
More information about the Jde-developers
mailing list