开发者

segmentation fault on g_string_truncate ()?

When trying the following in C :

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);

I see the following crash:

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

Why would this happen? Is there any initiation before calling g_string_printf() ?

From frame 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) 

But, I still can't find where t开发者_JS百科he problem is.


You probably have a bad pointer for the '%s' fields. As you are running gdb, here is what you can do:

(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

or you can also check types (is xmx.remote.number a pointer ?)

(gdb) ptype xmx.remote.number


Did you initialize qbuf?

GString *qbuf = g_string_new("");
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜