私は、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");
内のコードを呼び出す同じテストを試してみました。
矛盾するABIをリンクしていると思います。ここからは分かりませんが、ターゲット設定(デバッグ/リリース、アーキテクチャ(32/64ビット)、例外処理など、共有ライブラリ/静的ランタイム)の違いを確認するのは難しいです – sehe
sehe、そうです、ソリューションのプロジェクト – Andre