g_string_truncate()上的分段错误?

时间:2011-02-09 12:56:51

标签: c segmentation-fault glib

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

我看到以下崩溃:

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

为什么会这样?在调用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) 

但是,我仍然无法找到问题所在。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您是否初始化了qbuf

GString *qbuf = g_string_new("");