Windows触发了一个断点
Windows has triggered a breakpoint
我在尝试使用从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;
};
任何人都知道是什么导致了这种行为?
如果这是IPrintable
的完整定义,那么问题是m_pStr
是统一的,这意味着delete[]
的调用将不正确。
此操作失败:
v1 = Vector();
因为临时CCD_ 4被创建并且故障的析构函数被立即执行。为了纠正初始化m_pStr
,或者更好的解决方案是使用std::string
。如果您必须使用char*
,那么您还必须实现复制构造函数和赋值运算符,或者防止复制(请参阅What is The Rule of Three?)。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 触发的断点(析构函数)与类模板类型是自身的一个版本
- GDB:在 C++ 中的类函数上创建一个断点
- Boost Multi_array Boost_Assert抛出了一个断点
- 如何在共享库中的确切行号上设置一个断点
- 删除char阵列指针触发了一个神秘的断点
- Windows触发了一个断点
- visual C++多数组-Windows触发了一个断点
- Windows在myprogram.exe中触发了一个断点
- 代码触发了一个断点,但我根本没有设置断点
- 另一个进程中的断点处理
- 是否有一种方法来测试我们是否在一个断点上,使用纯gdb脚本
- HeapFree触发了一个断点
- 是否有一种方法可以将一个条件设置为gdb中的所有断点,用于调试Cpp代码
- 如何设置一个断点
- 项目触发了一个断点,后跟_BLOCK_TYPE_IS_VALID(pHeap->nBlockUse)