GLib:无法初始化 GValue [...] 该值已被初始化为“(空)”
GLib: cannot initialize GValue [...] the value has already been initialized as '(null)'
我使用 GValue
:
发现了非常奇怪的行为
此代码运行良好:
#include <gtk/gtk.h>
int
main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
{
GValue value;
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, "hallo");
gchar * strVal = g_strdup_value_contents (&value);
g_print ("gvalue: %s\n", strVal);
free (strVal);
g_value_unset (&value);
}
return 0;
}
但是,以下代码在 标记的行 中产生警告 cannot initialize GValue with type 'gchararray', the value has already been initialized as '(null)'
。
注意,唯一改变的是新块,里面还有另一个 GValue
。
#include <gtk/gtk.h>
int
main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
{
GValue value;
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, "hallo"); // warning spawns here
gchar * strVal = g_strdup_value_contents (&value);
g_print ("gvalue: %s\n", strVal);
free (strVal);
g_value_unset (&value);
}
{
GValue value2;
g_value_init (&value2, G_TYPE_INT);
g_value_set_int (&value2, 15);
gchar * strVal = g_strdup_value_contents (&value2);
g_print ("gvalue: %s\n", strVal);
free (strVal);
g_value_unset (&value2);
}
return 0;
}
谁能告诉我这是怎么回事?
您未正确初始化 GValue
。
GValue value = G_VALUE_INIT;
块范围内未初始化的变量有一些垃圾值,可能碰巧无效并触发断言(或者可能碰巧有效但没有任何反应)。
我使用 GValue
:
此代码运行良好:
#include <gtk/gtk.h>
int
main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
{
GValue value;
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, "hallo");
gchar * strVal = g_strdup_value_contents (&value);
g_print ("gvalue: %s\n", strVal);
free (strVal);
g_value_unset (&value);
}
return 0;
}
但是,以下代码在 标记的行 中产生警告 cannot initialize GValue with type 'gchararray', the value has already been initialized as '(null)'
。
注意,唯一改变的是新块,里面还有另一个 GValue
。
#include <gtk/gtk.h>
int
main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
{
GValue value;
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, "hallo"); // warning spawns here
gchar * strVal = g_strdup_value_contents (&value);
g_print ("gvalue: %s\n", strVal);
free (strVal);
g_value_unset (&value);
}
{
GValue value2;
g_value_init (&value2, G_TYPE_INT);
g_value_set_int (&value2, 15);
gchar * strVal = g_strdup_value_contents (&value2);
g_print ("gvalue: %s\n", strVal);
free (strVal);
g_value_unset (&value2);
}
return 0;
}
谁能告诉我这是怎么回事?
您未正确初始化 GValue
。
GValue value = G_VALUE_INIT;
块范围内未初始化的变量有一些垃圾值,可能碰巧无效并触发断言(或者可能碰巧有效但没有任何反应)。