V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  miloyip  ›  全部回复第 1 页 / 共 1 页
回复总数  5
2016-02-05 09:38:17 +08:00
回复了 iambic 创建的主题 问与答 请问一个 rapidjson 使用问题
RapidJSON 允许一个 Object 内有相同的 Key ,在 `AddMember()` 里不作检查。
`Document` 在 consturctor 中不给与 allocator 的时候,是自行建立一个 allocator 。那么 `Parse()` 的时候会用该 allocator 来分配内存。所以两个 block 的 第一个 block 中的 `Document d2` 在离开 block 时, allocator 会连同其分配的内存同时失效。因此之后 d 里会有 dangling pointer 。
解决方法是让 d2 采用 d 的 allocator :`Document d2(&alloc);`。
2015-05-06 16:30:31 +08:00
回复了 laoyur 创建的主题 C RapidJSON 我真的不会用,求指点
我不介意你把问题写在issue里,集中在一个地方,可能对其他人也会有帮助。
2015-05-06 10:19:20 +08:00
回复了 laoyur 创建的主题 C RapidJSON 我真的不会用,求指点
你先看看是否有其他环境原因。之后我才解释,这种调用方法不太高效,怎么改进。
2015-05-06 10:17:11 +08:00
回复了 laoyur 创建的主题 C RapidJSON 我真的不会用,求指点
刚测了,第二个也没问题啊……

{"array1":[{"array2":[{},{}]},{"array2":[{},{}]}]}
2015-05-06 10:13:32 +08:00
回复了 laoyur 创建的主题 C RapidJSON 我真的不会用,求指点
第一个没问题:

~~~cpp
TEST(Document, laoyur) {
Document doc;
doc.SetObject();

Value v(kArrayType);

doc.AddMember("array1", v, doc.GetAllocator());

StringBuffer s;
Writer<StringBuffer> writer(s);
doc.Accept(writer);

std::cout << s.GetString() << std::endl;
}
~~~

~~~
{"array1":[]}
~~~
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   993 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 20:40 · PVG 04:40 · LAX 12:40 · JFK 15:40
Developed with CodeLauncher
♥ Do have faith in what you're doing.