ベクトルをシリアライズしたいと思います。そして、ベクトルのポインターを変更する方法がわかりません..簡単にするために、次のようなベクトルがあるとしましょう。
vector<char> v;
そして、私はこのポインタを持っています:
char* c = { 'v', 'e', 'c', 't', 'o', 'r' };
そして、ベクトル v の内部ポインターが私の char* c を指すようにしたいと思います。
&v[0] -> c
cを指すようにベクトルを調整するにはどうすればよいですか? それを行う方法はありますか?
編集 22.10.2010
だからみんな、ベクトルをデバッグした後、私はこの解決策を思いつきました:
vector<char> dump;
memcpy(&myVector, &dump, sizeof(myVector)); // I change contents so it can work
myVector.assign(buf, buf+5); // copy contents into it from buffer (I don't like this part)
そして、これを機能させるには、定義する必要がありました
_ITERATOR_DEBUG_LEVEL=0
最初は 2 に設定されていて、実際にデバッグ チェックを行っているためです (推測します)。これはリリース モードでも定義されていません。今のところ私の回避策です。長期的には ppl にベクトルを強制的に削除させたいと思います...では、この解決策についてどう思いますか? そして、あなたが見る危険はありますか?
実際には memcpy でベクターをシリアライズする必要があります。クラス全体をシリアル化し(メモリのスナップショットを取得するなど)、ファイルに書き込み、リロード時にファイルから読み取り、コンストラクターを呼び出して新しい演算子を使用せずにオブジェクトを復元したい。
うーん、このベクター コンテナーはスタック メモリ上で実行されているため、memcpy はそれに到達できません。ヒープだけが問題なので、このコードは今のところうまくいくかもしれません。
copy(buf, buf + 5 myVvector.begin());
クラスで new キーワードを使用していないため、これも機能していません。私が理解している限り、このベクトルは初期化されていません。したがって、コピーしようとすると、このベクターを smt で push_back_fill すると、次のエラーが表示されます。
newDel.exe の 0x00ec455b で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00654b4c.
これは理にかなっています...だから、ベクトルのコンストラクター/イニシャライザーを外部から呼び出す方法を知っている人はいますか?