DLLからエクスポートされた関数を使用しようとしたときに問題が発生しました。
次のようなメッセージが表示されます(申し訳ありませんが、画像をアップロードできませんでした)。
WindowsがLibTester.exeでブレークポイントをトリガーしました。
これは、ヒープの破損が原因である可能性があります。これは、LibTester.exeまたはロードされたDLLのいずれかにバグがあることを示しています。
これは、LibTester.exeにフォーカスがあるときにユーザーがF12キーを押したことが原因である可能性もあります。
出力ウィンドウには、より多くの診断情報が表示される場合があります。
オーバーロードされた代入演算子といくつかのコンストラクターを持つVectorクラスがあります。
Vector::Vector() : X(0.0f), Y(0.0f), Z(0.0f) { }
Vector::Vector(const Vector& vector) : X(vector.X), Y(vector.Y), Z(vector.Z) { }
Vector::Vector(float x, float y, float z) : X(x), Y(y), Z(z) { }
.
.
.
Vector& Vector::operator=(const Vector& rhs)
{
this->X = rhs.X;
this->Y = rhs.Y;
this->Z = rhs.Z;
return *this;
}
この問題は、コンストラクターによって生成された新しいベクトルに既存のベクトルを割り当てようとしている場合にのみ発生します。
Vector v1 = Vector(); //Works
Vector v2 = Vector(1.0f, 1.0f, 1.0f); //Works
v1 = v2; //Works
v1 = Vector(); //Fails
v1 = Vector(1.0f, 1.0f, 1.0f); //Fails
これに関連する場合、Vector構造体はクラスIPrintableから派生します。
class IPrintable
{
public:
~IPrintable()
{
if (this->m_pStr != NULL)
delete[] this->m_pStr;
}
virtual char* ToString() = 0;
protected:
char* m_pStr;
};
何がこの振る舞いを引き起こす可能性があるかについて誰かが手がかりを持っていますか?