首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MsgPack中的free()/delete不匹配

MsgPack中的free()/delete不匹配
EN

Stack Overflow用户
提问于 2011-07-22 22:29:37
回答 2查看 1.8K关注 0票数 4

我尝试在我的程序中使用Msgpack。有没有人可以帮我看看msgpack wiki:http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387的下一个例子(流特性),并提供更多正确的例子来使用这个库和流特性。

代码语言:javascript
复制
#include <msgpack.hpp> 
#include <iostream> 
#include <string> 

int main(void) { 
    // serializes multiple objects using msgpack::packer. 
    msgpack::sbuffer buffer; 

    msgpack::packer<msgpack::sbuffer> pk(&buffer); 
    pk.pack(std::string("Log message ... 1")); 
    pk.pack(std::string("Log message ... 2")); 
    pk.pack(std::string("Log message ... 3")); 

    // deserializes these objects using msgpack::unpacker. 
    msgpack::unpacker pac; 

    // feeds the buffer. 
    pac.reserve_buffer(buffer.size()); 
    memcpy(pac.buffer(), buffer.data(), buffer.size()); 
    pac.buffer_consumed(buffer.size()); 

    // now starts streaming deserialization. 
    msgpack::unpacked result; 
    while(pac.next(&result)) { 
        std::cout << result.get() << std::endl; 
    } 

    // results: 
    // $ g++ stream.cc -lmsgpack -o stream 
    // $ ./stream 
    // "Log message ... 1" 
    // "Log message ... 2" 
    // "Log message ... 3" 
}

Valgrind说它有下一个错误:

代码语言:javascript
复制
==11325== 1 errors in context 1 of 2:
==11325== Mismatched free() / delete / delete []
==11325==    at 0x48CC919: operator delete(void*) (vg_replace_malloc.c:387)
==11325==    by 0x804A623: std::auto_ptr<msgpack::zone>::reset(msgpack::zone*) (auto_ptr.h:242)
==11325==    by 0x804A2E1: msgpack::unpacker::next(msgpack::unpacked*) (unpack.hpp:229)
==11325==    by 0x8049E93: main (pack2.cpp:24)
==11325==  Address 0x6e447c0 is 0 bytes inside a block of size 8,220 alloc'd
==11325==    at 0x48CD876: malloc (vg_replace_malloc.c:236)
==11325==    by 0x48DABC9: msgpack_zone_new (zone.c:198)
==11325==    by 0x48D811F: msgpack_unpacker_release_zone (unpack.c:333)
==11325==    by 0x804A3DA: msgpack::unpacker::release_zone() (unpack.hpp:261)
==11325==    by 0x804A31C: msgpack::unpacker::next(msgpack::unpacked*) (unpack.hpp:234)
==11325==    by 0x8049E93: main (pack2.cpp:24)
==11325== 
==11325== 
==11325== 2 errors in context 2 of 2:
==11325== Mismatched free() / delete / delete []
==11325==    at 0x48CC919: operator delete(void*) (vg_replace_malloc.c:387)
==11325==    by 0x804A623: std::auto_ptr<msgpack::zone>::reset(msgpack::zone*) (auto_ptr.h:242)
==11325==    by 0x804A335: msgpack::unpacker::next(msgpack::unpacked*) (unpack.hpp:234)
==11325==    by 0x8049E93: main (pack2.cpp:24)
==11325==  Address 0x6e3c5c0 is 0 bytes inside a block of size 8,220 alloc'd
==11325==    at 0x48CD876: malloc (vg_replace_malloc.c:236)
==11325==    by 0x48DABC9: msgpack_zone_new (zone.c:198)
==11325==    by 0x48D8211: msgpack_unpacker_init (unpack.c:194)
==11325==    by 0x804A08D: msgpack::unpacker::unpacker(unsigned int) (unpack.hpp:187)
==11325==    by 0x8049DC5: main (pack2.cpp:15)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-06 04:30:12

问题已在新版本的https://github.com/msgpack/msgpack/pull/90中修复

票数 0
EN

Stack Overflow用户

发布于 2011-07-22 23:09:24

在这个例子中,看起来一切正常。根据valgrind调用跟踪,该错误是Msgpack库中的某个错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6791522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档