【发布时间】:2013-03-06 06:13:39
【问题描述】:
我正在调用具有以下行的函数:
void call_system_command(const char *command_params)
{
GString *cmd = g_string_sized_new(1024);
g_string_append_printf(cmd, "/bin/bash /path/to/my/script '%s'", command_params);
system(cmd->str);
g_string_free(cmd, TRUE);
}
我在 g_string_sized_new 的行中遇到了段错误。 来自 gdb 的回溯显示:
(gdb) bt
#0 0x000000320ce56264 in g_slice_alloc () from /lib64/libglib-2.0.so.0
#1 0x000000320ce5c3db in g_string_sized_new () from /lib64/libglib-2.0.so.0
....
我已经尝试导出 G_SLICE=always-malloc,所以使用 malloc 代替 glib 自己的分配器。但是问题仍然相同。 我仍然在 g_slice_alloc 中遇到段错误。 我也从多个线程调用这个函数'call_system_command'。 会不会有问题?
该函数是插件的一部分,cron 每 15 分钟调用一次。段错误不是每次执行插件时都会发生,而是每 3-4 天发生一次。
任何有关进一步调试的指针都会有所帮助。
提前致谢。
【问题讨论】:
-
请向我们展示一个最小的、可编译的测试用例。 “最小”是指“仅使用重现此问题所需的基本要素”,“可编译”是指“能够在我们的系统上编译和调试,而无需填写空白或修复基本语法错误”。
标签: c segmentation-fault glib gstring