【问题标题】:g_file_new_for_path () causes segmentation faultg_file_new_for_path() 导致分段错误
【发布时间】:2011-11-06 01:35:49
【问题描述】:
// gcc -o 0 $(pkg-config --cflags --libs gtk+-2.0) 1.c
#include <gtk/gtk.h>
int main (int argc, char *argv[]) {
    GFile *f1 = NULL;
    f1 = g_file_new_for_path ("/home/user/1.txt");
    g_printf ("File loaded successfully.\n");
    return 0;
}

当我运行这个程序时,它会导致 g_file_new_for_path () 出现分段错误(无论 /home/user/1.txt 是否存在)。
我写错代码了吗?还是我的系统有问题?

P。 S.:我的系统是Arch Linux,GLib版本是2.28.8-1。

【问题讨论】:

  • 你能通过 GDB 运行它并在你的问题上附加一个回溯吗?
  • 程序收到信号SIGSEGV,分段错误。 0x00000000 在 ?? () (gdb) 回溯 #0 0x00000000 in ?? ()
  • 您需要确保在编译时指定了-g 标志(如果禁用优化会更容易)

标签: c glib gio


【解决方案1】:

在使用g_file_new_for_path 之前,您需要先致电g_type_init() -- 根据this thread。之后,程序就可以运行了。

【讨论】:

  • 对于较新版本的 glib,g_type_init() 会自动调用,并且已被弃用。
【解决方案2】:

首先你应该使用

// gcc -o 0 $(pkg-config --cflags --libs gio-2.0) 1.c    
#include <gio/gio.h>

而不是

// gcc -o 0 $(pkg-config --cflags --libs gtk+-2.0) 1.c    
#include <gtk/gtk.h>

那么你应该在g_file_new_for_path(...)之前g_type_init()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-31
    • 2019-07-21
    • 2018-07-28
    • 2014-04-25
    • 2011-07-18
    • 2013-02-26
    • 2022-01-12
    • 2014-09-10
    相关资源
    最近更新 更多