C++ Windows已触发断点
尝试使用从DLL导出的函数时遇到问题 我收到一条消息,其中说明(抱歉,我无法上载图像): Windows已在LibTester.exe中触发断点 这可能是由于堆损坏,这表明LibTester.exe或任何 它已加载的DLL的 这也可能是由于用户在LibTester.exe具有焦点时按下F12 输出窗口可能有更多诊断信息 我有一个向量类,带有重载赋值运算符和一些构造函数:C++ Windows已触发断点,c++,dll,C++,Dll,尝试使用从DLL导出的函数时遇到问题 我收到一条消息,其中说明(抱歉,我无法上载图像): Windows已在LibTester.exe中触发断点 这可能是由于堆损坏,这表明LibTester.exe或任何 它已加载的DLL的 这也可能是由于用户在LibTester.exe具有焦点时按下F12 输出窗口可能有更多诊断信息 我有一个向量类,带有重载赋值运算符和一些构造函数: Vector::Vector() : X(0.0f), Y(0.0f), Z(0.0f) { } Vector::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;
};
任何人都知道是什么导致了这种行为?如果这是
IPrintable
的完整定义,那么问题在于m\pStr
是统一的,这意味着delete[]的调用将不正确。
这失败了:
v1 = Vector();
因为创建了一个临时的
向量
,并立即执行有故障的析构函数。要更正初始化m\pStr
,或者更好的解决方案是使用std::string
。如果必须使用char*
,则还必须实现复制构造函数和赋值运算符或防止复制(请参阅).如果这是完整的代码,那么问题是mpstr
未初始化,但在IPrintable
析构函数中被引用。如何char*
字符串和手动内存管理的教科书案例适用于想要错误代码的非常丑陋的人。IPrintable需要一个构造函数,将构造函数和赋值运算符复制到正确的init并复制其mpstr成员。仍然无法正确答复,太糟糕了。。。谢谢大家的回答,原因确实是那个指针。我添加了一个构造函数、复制构造函数和赋值运算符,一切都解决了。希望我没有在实现中引入更多的问题。我不喜欢你的回答,非常不礼貌。