2011-05-06 47 views
-1

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

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

我所以没有得到那个委员会我不能编辑我以前的帖子......反正传递指针也没有帮助>。>也许我的回调函数是错误的,我使用事件框来捕获2个点击事件标签:

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); 
} 

空隙Glowne_Okno(PROFIL PROFIL)// < - 该函数作为参数接受PROFIL结构

正被前和Glowne_Okno我调用回调函数传递:

的g_signal_connect( G_OBJECT(Eventy [0]),“b utton_press_event“,G_CALLBACK(test),& profil);

之前我也被称为: gtk_widget_set_events(Eventy [0],GDK_BUTTON_PRESS_MASK)

+0

不清楚你正在尝试什么,或者你的问题是什么,或者它与gtk有什么关系。你可以发布一些代码,并更清楚地解释你想要做什么? – ptomato 2011-05-06 08:32:35

+0

'std :: vetor'看起来像一个C++的东西:c标签被删除,C++标签被添加。也可以尝试在你的文章中添加一些标点符号,使其更易于阅读。 – pmg 2011-05-06 08:49:41

回答

0

你的主要问题是,你通过指针局部变量(参数是局部变量) 的信号,这将被称为在函数返回并破坏过程中的结构之后很久。

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