ошибка сегментации в g_string_truncate ()? - PullRequest
0 голосов
/ 09 февраля 2011

При попытке выполнить следующее в 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 ]

2 голосов
/ 09 февраля 2011

Возможно, у вас неправильный указатель на поля '% 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 голос
/ 09 февраля 2011

Вы инициализировали qbuf?

GString *qbuf = g_string_new("");
...