【发布时间】:2015-09-29 17:57:40
【问题描述】:
我正在用 C (g_lib) 创建一个简单的节俭服务器/客户端程序。 这就是我的 thrift IDL 文件的样子:
namespace cpp tutorial
service Calculator {
void ping(),
binary getdata()
}
thrift 服务器上的 getdata 实现如下所示:
static gboolean
tutorial_calculator_handler_getdata (CalculatorIf *iface,
GByteArray *_return,
GError **error)
{
THRIFT_UNUSED_VAR (iface);
THRIFT_UNUSED_VAR (error);
puts ("getdata()");
GByteArray *gbarray;
gint i;
gbarray = g_byte_array_new ();
for (i = 0; i < 100; i++)
g_byte_array_append (gbarray, (guint8*) &i, 1);
*_return = *gbarray;
return TRUE;
}
现在,在客户端,我按如下方式调用 getdata:
....
....
GByteArray *data;
....
....
if (!error && calculator_if_getdata (client, &data, &error)) {
puts ("getdata()");
}
不幸的是,客户端在calculator_if_getdata 调用中崩溃并显示以下消息:
*** Error in `./client': munmap_chunk(): invalid pointer: 0xb741742d ***
Aborted (core dumped)
这是将整数数组从服务器发送到客户端的正确方法吗?我在这里做错了什么?
【问题讨论】: