この質問ではないことがよく知られているSOメモリ移転
で似た名前を持つものに重複している MSVCでDLLが静的にリンクされている場合(/ MTフラグ)、メモリを割り当てたDLLは割り当てを解除しなければならない(MUST)。それ以外の場合は メモリの割り当て解除によって実行時エラーが発生します。ここで
が問題である:
- 私はDLL内
std::vector
が割り当てられている、A
を言います。 A
は、このベクトルをDLL、たとえばB
に渡します。- DLL
B
は、ベクターにデータを挿入します。 - DLL
A
がベクトルを破棄しようとすると、エラーが発生します。通常、アイテム挿入時に起こる - -
私はB
にベクトルを渡す前にstd::vector::reserve
を使用する場合、データを保持し、メモリの再割り当てを防ぐのに十分な大きさのベクトルを持っていることを考え出した、私は得ることはありませんベクトルを破棄しようとしたときのA
のエラー。メモリの再割り当ての場合、B
は、自身のヒープ内のベクトルに割り当てます。私の推論は間違っていますか?どうすればこれを防ぐことができますか?
C++ランタイムの静的リンクを使用しないようにする – Serge
別のオプション - Windowsヒープを使用してこのベクターのアロケータをオーバーライドします。 – Serge
@Serge静的リンケージを使用してスタンドアロン実行ファイルを作成する必要があります。あなたはそのようなカスタムアロケータの例を知っていますか?以前はカスタムアロケータを作成しようとしましたが、それは簡単ではありませんでした。ありがとうございます –