我在尝试使用从我的DLL导出的函数时遇到问题。Windows已触发断点
我得到这一条消息(对不起,但我不能上传图片):
Windows已经引发了LibTester.exe一个断点。
这可能是由于堆损坏引起的,这表明LibTester.exe或其已加载的DLL的任何 中存在错误。
这也可能是由于用户按下F12而LibTester.exe有焦点。
输出窗口可能有更多诊断信息。
我有一个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
在情况下,这是相关的,矢量结构从类派生 IPrintable:
class IPrintable
{
public:
~IPrintable()
{
if (this->m_pStr != NULL)
delete[] this->m_pStr;
}
virtual char* ToString() = 0;
protected:
char* m_pStr;
};
任何一个有线索,以什么可能会导致这种行为?
如果这是完整的代码,那么问题是'm_pStr'未初始化,但在'IPrintable'析构函数中被引用。 – john
教科书案例如何char *'字符串和手动内存管理是非常丑陋的人谁想要错误的代码。 – Puppy
IPrintable需要构造函数,复制构造函数和赋值运算符以正确初始化并复制其m_pStr成员。 –