私が見ている奇妙な動作に基づいて、次のコードは無効であると推測しています。私の質問は: 以下で作成された msgpack_object は msgpack_sbuffer に依存していますか? つまり、msgpack_sbuffer_free(buffer) が呼び出されると、(msg.data 内の) msgpack_object は無効になりますか? もしそうなら、この状況で依存関係のない msgpack_object を割り当てられたヒープを取得する正しい方法は何ですか?
msgpack_object create_static_msg_object() {
msgpack_sbuffer* buffer = msgpack_sbuffer_new();
msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write);
// does some calls to msgpack_pack_*() here
msgpack_unpacked msg;
msgpack_unpacked_init(&msg);
msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL);
/* cleaning */
msgpack_sbuffer_free(buffer);
msgpack_packer_free(pk);
return msg.data;
}