C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – MsgPack中的free()/ delete不匹配大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试在我的程序中使用Msgpack.
有人可以帮助我使用msgpack wiki: @L_301_0@中的下一个示例(流媒体功能),并提供更多使用此库和流媒体功能的正确示例.

#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说它有下一个错误

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

解决方法

在这个例子中看起来一切正常.根据valgrind调用跟踪,这个bug有些在Msgpack库中.

大佬总结

以上是大佬教程为你收集整理的c – MsgPack中的free()/ delete不匹配全部内容,希望文章能够帮你解决c – MsgPack中的free()/ delete不匹配所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。