我一直在努力尝试在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;
}
答案 0 :(得分:1)
这是问题所在:
int main() {
SSLL<char> list;
list.push_back('A');
delete &list; // WRONG!
}
您的类是堆栈本地对象,您不需要在其地址上调用delete
:当它超出范围时会自动销毁。
答案 1 :(得分:0)
您尝试删除variable allocated on stack,只应在delete
分配的内存上调用new
,this answer已涵盖此内容。
也许您只想使用std::vector::clear()
来清除列表(虽然没有必要,内存会被向量析构函数释放)。