質問

dll内にクラスがあり、そのdllを使用するexeファイルがあります。 Exeは、dll内にクラスを作成し、そのメソッドを呼び出すだけです。リリースモードでコンパイルすると、すべて正常に動作します。しかし、MDdフラグを使用してデバッグモードですべて(クラスが使用するOpenCVライブラリを含む)をコンパイルすると、次のようになります。 ジェネラコディセタグプレ

関連するすべてのバイナリは、まったく同じバージョンのランタイムdllを使用しており、すべてがVS 2008と同じコンピューターでコンパイルされます。(私のデバッグに基づいて)理解している限り、問題は次のとおりです。>

exe(mainの下)で「new」演算子を使用してクラスのインスタンスを作成しています。クラスのコンストラクターがメモリ割り当てを必要とする処理を実行するとすぐに、クラス自体のメモリ位置が上書きされます。 dllとexeの両方が同じメモリスペースを使用していますが、「次に割り当て可能な位置」のオフセットが異なります。したがって、dllは、exe内ですでに割り当てが行われていることを認識しないため、クラスが存在するメモリ領域を上書きします。明らかに、これはメモリの問題を引き起こします。

なぜこれが起こるのか、何か考えはありますか?私は状況を説明するために最善を尽くしましたが、もちろん必要に応じてより多くの情報を提供することができます。

よろしくお願いします。

役に立ちましたか?

解決 2

問題は、誤ってクラスのヘッダーファイルから欠落している2つのパブリックメンバー変数であることがわかりました。それらを追加すると、問題は解決しました。

他のヒント

これらのデバッグマクロを確認してください。これは非常に重要です。ASSERTのようなもの...

デバッグモードのときにコンパイルされます。

リリースモードでコードをコンパイルすると、デバッグマクロは無効になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top