链接列表析构函数(C ++ Visual Studio)上的调试断言失败

时间:2014-10-09 13:47:27

标签: c++ visual-studio-2012

我一直在努力尝试在Visual Studio上用C ++创建一个单链表但继续遇到这个奇怪的错误。当我测试列表时,除了删除列表之外,一切都在测试中完美无缺。出于某种原因,每当我调用delete时,我都会从Visual Studio中获得一个弹出窗口,其中包含以下消息:

调试断言失败! 表达式:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

调试断言失败! 表达式:_CtrilsValidHeapPointer(pUserData)

调试断言失败! 表达式:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

我设计列表的方式,head是指向不包含任何数据成员的虚拟节点的指针。以下是发现导致问题的代码:

int main() {
SSLL<char> list;
list.push_back('A');
delete &list;
}

2 个答案:

答案 0 :(得分:1)

这是问题所在:

int main() {
  SSLL<char> list;
  list.push_back('A');
  delete &list; // WRONG!
}

您的类是堆栈本地对象,您不需要在其地址上调用delete:当它超出范围时会自动销毁。

答案 1 :(得分:0)

您尝试删除variable allocated on stack,只应在delete分配的内存上调用newthis answer已涵盖此内容。

也许您只想使用std::vector::clear()来清除列表(虽然没有必要,内存会被向量析构函数释放)。