0

msgpack_pack_raw および msgpack_pack_raw_body を使用して unsigned char 配列を送信するにはどうすればよいですか? さらに重要なのは、それを取得 (アンパック) する方法です。私がやったことは次のとおりです。

msgpack_sbuffer* buffer = msgpack_sbuffer_new();
msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write);
msgpack_sbuffer_clear(buffer);
msgpack_pack_array(pk, 10);

unsigned char a[10] = "0123456789";
msgpack_pack_raw(pk, 10);
msgpack_pack_raw_body(pk,a,10);

そしてレシーバー部分には次のものがあります:

msgpack_unpacked msg;
msgpack_unpacked_init(&msg);
msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL);
msgpack_object obj = msg.data;
msgpack_object* p = obj.via.array.ptr;
int length = (*p).via.raw.size;
IDPRINT(length);
unsigned char* b = (unsigned char*) malloc(length);
memcpy(b,(*p).via.raw.ptr,length);

しかし、「int length = (*p).via.raw.size;」を実行すると、seg fault がスローされます。

理由はありますか?

4

1 に答える 1