2011-08-29 181 views
2
// 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存在)。
我誤寫了代碼嗎?或者這是我的系統的錯誤?g_file_new_for_path()導致分段錯誤

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

+0

你可以通過GDB運行它並追加回溯到你的問題嗎? – GWW

+0

編程接收到的信號SIGSEGV,分段故障。 0x00000000在? ()(gdb)backtrace#0 0x00000000 in ?? () – 5frame

+0

您需要確保在編譯時指定了'-g'標誌(如果禁用優化,則標誌更容易) – GWW

回答

3

在使用g_file_new_for_path之前,您需要致電g_type_init() - 根據this thread。之後,該程序起作用。

+1

從新版本的glib開始,會自動調用'g_type_init()',並且已被棄用。 – BlackVegetable

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_type_init()之前g_file_new_for_path(...)

+0

gtk + -2.0 pkgconfig文件已包含gio-2.0 :) – 5frame