“GLib-GObject-WARNING **:带有无效(NULL)类指针的实例”是什么意思?

时间:2009-12-31 01:03:19

标签: c# linux gtk gtk#

每当我关闭我的Gtk#应用程序时,我都会得到这个:

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-WARNING **: g_set_prgname() called multiple times

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed

(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_object_ref: assertion `object->ref_count > 0' failed

我不确定这里发生了什么。我发现一个人在谷歌上有类似的问题,但他们似乎是应用程序的用户,而不是开发人员。一个想法?

2 个答案:

答案 0 :(得分:4)

有些东西搞砸了。

g_set_prgname()是一个内部例程,通常只由程序初始化程序调用,如gdk_init()或gtk_init()(调用gdk_init())。因此,如果它被调用两次,那么它不应该。我读了你的答案,也许一些Glade初始化例程正在冗余地调用它。了解您正在运行的Glade和GTK的版本将会有所帮助。

就其他消息而言...... GLib / GObject是一个对象系统,具有单继承和RTTI(运行时类型识别),用C实现。

那些警告/关键对表明你的一些对象指针失败了RTTI测试非常悲惨。这样的测试在GTK / GDK内部常见 - 例如,“我希望这个指针是如此,但在我这样对待之前,我最好确定一下。”您看到的每个消息对都表示指针已经传递给这样的例程,但它指向的不仅仅是预期的对象类型,它甚至没有指向RTTI系统识别的任何内容,因此RTTI系统正在举手

这种指针失败的最可能的罪魁祸首是:

  • 这是一个指向垃圾的狂野指针
  • 这是陈旧的 - 它曾经指向一个已被破坏的合法对象
  • 它指向一个活动对象,但是对象的内容已经被破坏,RTTI系统无法找出对象的类型

答案 1 :(得分:0)

好吧,我仍然不确定这个警告意味着什么,但我弄清楚是什么导致它:

我有一个带有AccelGroup的glade文件。 AccelGroup是主窗口及其MenuItems的属性。我从Window中删除了它。这是警告开始的时候。我通过完全从林间空地文件中删除它来固定它(从而将其从菜单项中删除)。