0

したがって、私は次の方法でC ++でのバイナリファイルの読み取りと書き込みを自動化しようとしています(基本的に、動的データを処理するときに物事が特定されるため):

#include <iostream>
#include <fstream>
using namespace std;

template <class Type>
void writeinto (ostream& os, const Type& obj) {
    os.write((char*)obj, sizeof(Type));
}

template <class Type>
void readfrom (istream& is, const Type& obj) {
    is.read((char*)obj, sizeof(Type));
}

int main() {
    int n = 1;
    int x;

    fstream test ("test.~ath", ios::binary | ios::out | ios::trunc);
    writeinto(test, n);
    test.close();

    test.open("test.~ath", ios::binary | ios::in);
    readfrom(test, x);
    test.close();

    cout << x;
}

また、期待される出力は「1」になります。ただし、このアプリケーションは、画面に何かが表示される前にクラッシュします。より具体的には、writeinto関数内の場合です。

理由と、可能であれば解決策について説明してもらえますか?

4

1 に答える 1

2

オブジェクトのアドレスを取得する必要があります。

#include <memory>

os.write(reinterpret_cast<char const *>(std::addressof(obj)), sizeof(Type));
//                                      ^^^^^^^^^^^^^^^^^^^

クランチでは、と言うこともできますが&obj、過負荷の存在下では安全ではありませんoperator&

于 2012-11-04T03:47:06.890 に答える