动态分配时 class 构造函数中的堆损坏

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;

断言失败,从我读到的正在覆盖的堆内存是正在构建的场景的内存。

HEAP CORRUPTION DETECTED: after Normal block (#1735) at 0x000001831FD719A0. CRT detected that the application wrote to memory after end of heap buffer. Normal located at 0x000001831FD719A0 is 624 bytes long.

查看堆:

TetraVisu.exe!tetraRender::Scene 1 624

和:

<0x1831FD719A0> 0x000001831fd719a0 {cam={lookAt={value=0x000001831fd719a0 {{x=1.00000000 y=0.000000000 z=0.000000000 ...}, ...} } ...} ...} 624

我不知道如何调试它,因为似乎只要我分配这个对象,我的堆就会在构造函数启动时立即损坏。我尝试分配其他对象,一切顺利。它似乎只发生在 Scene 和我有成员 Camera shadowProjection 时。

我知道堆问题很难解决,这就是为什么我需要比我更了解 C++ 的人。

编辑:场景和相机对象也来自我制作的静态链接库,我不知道这是否有帮助。

好的,所以这个问题远不是为任何人提供帮助的正确信息。这个问题似乎是随机出现和消失的。这似乎是因为用于构建库的 headers 和用于在最终代码中调用 objects 之间的差异。我想这就是堆被破坏的原因,大小的计算可能不同。

我没有再遇到这个问题,所以这可能是原因。