2016-10-16 5 views
0

私は、boost :: serializationを使ってデバッグの目的でいくつかのオブジェクトの素早いシリアル化をセットアップしたかったのです。boost :: serializationスタックがtext_oarchiveオブジェクトのために破損しました

私は以下の機能を単純なスタンドアロンのWin32コンソールアプリケーション(32ビットおよび64ビット)で成功裏にテストし、期待通りに機能しました。

私の主なVisual Studioソリューション(64ビット)の機能を使用すると、「ランタイムチェック失敗#2 - 変数「oa」の周りのスタックが壊れています。機能を終了するときは です。作成されたファイルは正常に表示されますが、アプリケーションはクラッシュします。 最初に、私はofstreamを閉じていないので、これが起こったと思ったが、これは役に立たない。

私はQuantLibに暗示されている単純な行列構造をアーカイブしようとしていますが、エラーメッセージの原因はtext_oarchiveオブジェクトに関するものです。

void saveMatrix(const Matrix &m, const char* fileName){ 
    ofstream file(fileName); 
    text_oarchive oa(file); 
    oa << m.rows() << m.columns(); 
    for (Matrix::const_iterator it = m.begin(); it != m.end(); it++) 
     oa << *it; 
    file.close(); 
} 

Iは、アプリケーション/ソリューションで、テストプロジェクト私はそれが働いていたテストプロジェクトでは、破損したスタックを取得する最初のもので

 Matrix m(2, 3, 0); 
     m[0][0] = 2.3; m[0][1] = 1.2; m[0][2] = 22; 
     m[1][0] = 7.3; m[1][1] = 8.2; m[1][2] = 8.22; 
     saveMatrix(m, "testArchive.txt"); 

内のコードを呼び出す同じテストを試してみました。

+0

矛盾するABIをリンクしていると思います。ここからは分かりませんが、ターゲット設定(デバッグ/リリース、アーキテクチャ(32/64ビット)、例外処理など、共有ライブラリ/静的ランタイム)の違いを確認するのは難しいです – sehe

+0

sehe、そうです、ソリューションのプロジェクト – Andre

答えて

1

問題は、インクルードされたヘッダーと使用されたライブラリ(1.61、1.59)の異なるバージョンのブーストです。私の間違い。

VS Projectsのプロパティを修正すると、コードは期待通りに機能しました。 ヒントseheをありがとう。

+0

乾杯。 +1の結果を投稿します。 – sehe

関連する問題