1

問題を再現する簡単なプログラムを作成しました。

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/tuple/tuple.hpp>
#include <sstream>
#include <iostream>    

template<typename T>
std::string serialize(const T & value)
{
    std::ostringstream oss;
    boost::archive::text_oarchive oa(oss);
    oa << value;
    return oss.str();
}    

template<typename T>
T deserialize(const std::string & buffer)
{
    std::istringstream iss(buffer);
    boost::archive::text_iarchive ia(iss);
    T ret;
    ia >> ret;
    return ret;
}    

struct MyClass
{
    MyClass() {}
    MyClass(const std::string & name) : name(name) {}

    template<class Archive>
    void serialize(Archive & ar, const unsigned int)
    {
        ar & name;
    }

    std::string name;
};    

int main()
{
    MyClass myClass("Test");
    std::string serialized = serialize(myClass);
    std::cout << "Serialized: " << serialized << std::endl;
    MyClass deserialized = deserialize<MyClass>(serialized);
    std::cout << "Name after deserialization: " << deserialized.name << std::endl;
}

コードは正常にコンパイルされますが、実行時に次のエラーが発生します。

Serialized: 22 serialization::archive 9 0 0 4 Test
test(74010) malloc: *** error for object 0x109bf55e0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

nameデバッガーでは、boostが変数を逆シリアル化しようとしたときにエラーが発生することがわかります。

誰かが私が間違っていることを理解するのを手伝ってもらえますか?

アップデート

私はMacOSX Lionを使用しており、GCC 4.6.2(g++-mp-4.6 (GCC) 4.6.2)とブーストバージョン1.48を使用しています。どちらもMacPorts経由でインストールされます。

コマンドラインは次のとおりです。

g++ -o test -I/opt/local/include -L/opt/local/lib main.cpp -lboost_serialization

ここでSubversionからコードをチェックアウトできます:http ://stacked-crooked.googlecode.com/svn/trunk/Playground/Serialization 。

アップデート

Linux GCC 4.6.1とブースト1.48でテストしましたが、正常に動作します。それはどういうわけかMacでの私の設定に固有の問題であるに違いありません。

4

1 に答える 1

0

何が起こったのか:

  1. Boostは、組み込みのAppleGCC4.2を使用してMacPortsによって構築されました。
  2. Apple以外のGCC4.6.2(これもMacPortsから入手)を使用してプログラムをコンパイルしていました。
  3. 実行時にロードされたブーストバイナリは、私のバイナリと互換性がありませんでした。
  4. クラッシュ!
于 2012-01-28T01:26:26.093 に答える