动态分配时类构造函数中的堆损坏
Heap corruption at class constructor when allocated dynamically
我有一个问题,我很难弄清楚。这个发生的程序有点大,所以我将尝试只放置相关的代码片段,希望它足够了。
这是创建我的场景并导致堆损坏的代码:
tetraRender::Camera cam(600.0f, 800.0f, 0.75f);
_ASSERT(_CrtCheckMemory());
//CORRUPTION HAPPENS IN THE NEXT LINE
std::shared_ptr<tetraRender::Scene> scene(new tetraRender::Scene(cam));
在那部分代码之前,我没有完成动态分配。场景的构造函数是这样开始的:
tetraRender::Scene::Scene(Camera cam)
{
_ASSERT(_CrtCheckMemory());
setCamera(cam);
light.intensity = 1.0f;
断言失败,从我读到的内容来看,正在写入的堆内存是构建的场景内存。
检测到堆损坏:在0x000001831FD719A0的正常块 (#1735) 之后。 CRT 检测到应用程序在堆缓冲区结束后写入内存。 位于 0x000001831FD719A0 的正常长度为 624 字节。
并查看堆:
TetraVisu.exe!tetraRender::Scene 1 624
和:
<0x1831FD719A0> 0x000001831fd719a0 {cam={lookAt={value=0x000001831fd719a0 {{x
=1.00000000 y=0.000000000 z=0.0000000000 ...}, ...} } ...} ...} 624
我不知道如何调试它,因为似乎一旦我分配这个对象,我的堆就会在构造函数启动后立即损坏。我尝试分配其他对象,它很好。它似乎只发生在场景和当我有成员相机阴影投影时。
我知道堆问题很难弄清楚,这就是为什么我需要比我更了解C++的人。
编辑:场景和相机对象也来自我制作的静态链接库,我不知道这是否有帮助。
好的,所以这个问题远没有为任何人提供帮助的正确信息。这个问题似乎随机出现和消失。这似乎是因为用于构建库的标头与用于调用最终代码中的对象的标头之间存在差异。我认为这就是堆损坏的原因,大小可能以不同的方式计算。
我不再有这个问题了,所以这可能是原因。
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 动态构造函数中的新字符 [] 抛出"损坏的顶部大小";
- 构造函数初始化和对象损坏
- 动态分配时类构造函数中的堆损坏
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 在向量中使用不带复制且没有 noexcept 移动构造函数的对象.实际损坏的内容以及我如何确认它
- 在构造函数中使用std::vector导致内存损坏
- 复制构造函数和重载赋值运算符的堆损坏错误
- C++ 异常的双重释放损坏错误(复制构造函数不起作用)
- 用错误的“”调用构造函数;这个“;指针.这是堆栈损坏吗
- 构造函数中的字段初始化会损坏内存
- c++构造函数中的损坏
- Dll导出构造函数有导致堆损坏的风险
- c++双精度释放或损坏(out):即使使用复制构造函数和赋值操作符
- 从复制构造函数外部修改对象成员时导致向量内存损坏,但从复制构造函数内部修改时不会
- std::string构造函数中的内存分配/堆损坏