2011-02-09 16 views
0

Cに次のようにしようとすると:これはなぜ起こるのでしょうg_string_truncate()のセグメンテーションフォルト?

Program received signal SIGSEGV, Segmentation fault. 
0x00984809 in g_string_truncate() from /lib/libglib-2.0.so.0 
(gdb) 

:?

g_string_printf(qbuf,"INSERT INTO inbox (number, smsdate, text) VALUES ('%s','%04d-%02d-%02d %02d:%02d:%02d', '%s')", 
      xmx.remote.number, 
      xmx.smsc_time.year, 
      xmx.smsc_time.month, 
      xmx.smsc_time.day, 
      xmx.smsc_time.hour, 
      xmx.smsc_time.minute, 
      xmx.smsc_time.second, 
      xmx.user_data[0].u.text); 

私は、次のクラッシュを参照してくださいg_string_printf()を呼び出す前に開始がありますか?

フレーム2から:

(gdb) frame 2 
#2 0x08049ba8 in fetching_phone (unit=0x807cd80) at main.c:152 
152   g_string_printf(qbuf,"INSERT INTO inbox (number, smsdate, text) VALUES ('%s','%04d-%02d-%02d %02d:%02d:%02d', '%s')", 
(gdb) ptype xmx.remote.number 
type = char [40] 
(gdb) ptype xmx.smsc_time.year 
type = int 
(gdb) ptype xmx.smsc_time.month 
type = int 
(gdb) ptype xmx.smsc_time.day 
type = int 
(gdb) ptype xmx.smsc_time.hour 
type = int 
(gdb) ptype xmx.smsc_time.minute 
type = int 
(gdb) ptype xmx.smsc_time.second 
type = int 
(gdb) ptype xmx.user_data[0].u.text 
type = unsigned char [1601] 
(gdb) 

しかし、問題がどこにあるか、私はまだ見つけることができません。

+0

g_string_printfとは何ですか? id xmx.remote.number String? – bmargulies

+0

@bmargulies:彼は 'glib'について話しています:http://developer.gimp.org/api/2.0/glib/glib-Strings.html –

+0

' qbuf'と 'xmx'はどのように宣言/定義されていますか?どのように 'qbuf'を初期化していますか?私たちはおそらく、何かを助けるために、より多くの情報とコードが必要になるでしょう。 – Hasturkun

答えて

1

あなたはqbufを初期化しましたか?

GString *qbuf = g_string_new(""); 
+0

解決済み.... – capede

2

'%s'フィールドには、おそらく不正なポインタがあります。 あなたはここに、GDBを実行しているとは、あなたが何ができるかです:

(gdb) bt 
...trace... 
# see the frame # of your call to g_string_printf() 
(gdb) frame 5 # considering it was 5 
(gdb) print xmx.remote.number 
(gdb) print xmx.user_data[0].u.text 
(gdb) print *xmx.remote.number 
(gdb) print *xmx.user_data[0].u.text 

か、また、(xmx.remote.numberポインタです?)の種類を確認することができます

(gdb) ptype xmx.remote.number 
関連する問題