指针结合在GTK中

时间:2011-05-06 08:31:00

标签: c++ pointers gtk

我有std :: vetor我的结构它被全局分配在一个文件中然后一些结构被传递给另一个放在另一个文件中的函数然后它再次被传递给另一个放在另一个文件中的函数文件。是否有可能指针以某种方式丢失,因为我在调用最后一个函数时遇到了访问冲突。

编辑:当我将指针传递给结构而不是结构时,它可以工作。

我没有得到那个板我无法编辑我以前的帖子...无论如何传递指针也没有帮助>。>也许我的回调函数是错误的,我使用事件框来捕捉标签上的2x点击事件:

void test(GtkWidget* widget, GdkEventButton * event, gpointer callback_data) 
{
    Profil* profil = (Profil*) callback_data;
    std::cout << profil->username << std::endl; //<--here it goes nuts
    if (event->type == GDK_2BUTTON_PRESS && event->button == 1) OknoPogody(profil);
}

void Glowne_Okno(Profil profil)//&lt; - 此函数作为参数接受Profil结构

在Glowne_Okno之前和之前传递我调用回调函数:

g_signal_connect(G_OBJECT(Eventy [0]),“button_press_event”,G_CALLBACK(test),&amp; profil);

在我打电话之前: gtk_widget_set_events(Eventy [0],GDK_BUTTON_PRESS_MASK)

1 个答案:

答案 0 :(得分:0)

您的主要问题是,您将指向本地变量(参数是局部变量)的指针传递给 信号,在函数返回后很长时间被调用并破坏过程中的结构。

由于您使用的是C ++,我强烈建议您使用gtkmm C++ wrapper。这为您提供了连接信号的类型安全方法以及使用仿函数作为处理程序的能力。我不确定它(或者它的实用程序sigc库)是否提供了一种将参数绑定到仿函数的方法,但如果没有,它将与来自C ++ 0x的boost::bindstd::bind一起使用