调试断言失败!表达式:删除时__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 上:
- main.cpp(中断在第 853 行)
- shape.h and shape.cpp
编辑:如果你持有它,它也会在第 167 行中断,因为它具有相同的代码,但它应该与错误无关。
当您删除调试堆时,检查指针并检查分配的区域以及区域前后的一些 "guard" space。它检测到一些错误,例如写越界。它可能发生在删除步骤之前的任何地方。您必须做的是仔细跟踪和调试对数组的所有访问,以查找写入数组外部的错误。
我和我的朋友正在更新我们的类似俄罗斯方块的项目,使其更加动态(允许任何大小的形状,而不是只有 4 个平铺形状),从数组升级到矢量。之前一切正常,但现在只要形状到达地板,我们就会从标题中得到错误。这是它发生的确切代码行(delete[] currentShape):
main.cpp
if (currentShape != NULL) {
delete[] currentShape; // Breaks here
}
currentShape = new Shape;
整个项目有点长所以在 Pastebin 上:
- main.cpp(中断在第 853 行)
- shape.h and shape.cpp
编辑:如果你持有它,它也会在第 167 行中断,因为它具有相同的代码,但它应该与错误无关。
当您删除调试堆时,检查指针并检查分配的区域以及区域前后的一些 "guard" space。它检测到一些错误,例如写越界。它可能发生在删除步骤之前的任何地方。您必须做的是仔细跟踪和调试对数组的所有访问,以查找写入数组外部的错误。