【问题标题】:GLib: cannot initialize GValue [...] the value has already been initialized as '(null)'GLib:无法初始化 GValue [...] 该值已被初始化为 '(null)'
【发布时间】:2021-06-28 07:16:40
【问题描述】:

我发现使用 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;
}

谁能告诉我这是怎么回事?

【问题讨论】:

    标签: c glib


    【解决方案1】:

    您未正确初始化GValue

    GValue value = G_VALUE_INIT;
    

    块范围内未初始化的变量有一些垃圾值,可能碰巧无效并触发断言(或可能碰巧有效但什么也没发生)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2014-03-07
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多