调试断言失败!表达式:删除时__BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

Debug Assertion Failed! Expression: __BLOCK_TYPE_IS_VALID(pHead->nBlockUse) when deleting

我和我的朋友正在更新我们的类似俄罗斯方块的项目,使其更加动态(允许任何大小的形状,而不是只有 4 个平铺形状),从数组升级到矢量。之前一切正常,但现在只要形状到达地板,我们就会从标题中得到错误。这是它发生的确切代码行(delete[] currentShape):

main.cpp

    if (currentShape != NULL) {
        delete[] currentShape; // Breaks here
    }
    currentShape = new Shape;

整个项目有点长所以在 Pastebin 上:

编辑:如果你持有它,它也会在第 167 行中断,因为它具有相同的代码,但它应该与错误无关。

当您删除调试堆时,检查指针并检查分配的区域以及区域前后的一些 "guard" space。它检测到一些错误,例如写越界。它可能发生在删除步骤之前的任何地方。您必须做的是仔细跟踪和调试对数组的所有访问,以查找写入数组外部的错误。