简体   繁体   English

MsgPack 中的 free()/delete 不匹配

[英]Mismatched free()/delete in MsgPack

I try to use Msgpack in my program.我尝试在我的程序中使用 Msgpack。 Can someone help me with next example (Streaming feature) from msgpack wiki: http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387 and provide more correct example of using this library with streaming feature.有人可以帮助我使用 msgpack wiki 中的下一个示例(流式传输功能): http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387并提供更正确的使用此库和流式传输功能的示例。

#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 say that it has next errors: Valgrind 说它有下一个错误:

==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)

Looks like everything is ok in this example.看起来在这个例子中一切正常。 According to valgrind call traces, the bug is somewere inside Msgpack library.根据 valgrind 调用跟踪,该错误位于 Msgpack 库中。

issue was fixed in new version https://github.com/msgpack/msgpack/pull/90问题已在新版本https://github.com/msgpack/msgpack/pull/90中修复

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM