如何解决错误:在同一存储位置上两次调用Delete
| 我在C ++中编写了此函数,并将其作为更大程序的一部分:Object Single_list<Object>::pop_front() {
//Single_node<Object> *tmp_front;
//Object hold;
if (empty()) {
throw underflow();
}
Single_node<Object> first_node = front();
Single_node<Object> *ptr = list_head;
list_head = list_head->next();
delete ptr;
return first_node.retrieve();
}
但是,当我尝试使用此功能时,会收到以下消息:
警告:在同一内存位置上调用两次删除:0x100100160
我真的很困惑,我没有两次删除指针(假设这是引起问题的原因?)。
任何建议将被认真考虑。
根据要求,这是Single_Node的构造函数和检索函数,尽管我不确定这对我得到的有关删除的错误有多大帮助:
template <typename Object>
Single_node<Object>::Single_node( const Object &e,Single_node<Object> *n ):element( e ),next_node( n )
{
// empty constructor
}
template <typename Object>
Object Single_node<Object>::retrieve() const
{
return element;
}
template <typename Object>
Single_node<Object> *Single_node<Object>::next() const
{
return next_node;
}
解决方法
以Mankarse的评论为基础,尝试以下操作:
Object Single_list<Object>::pop_front() {
if (empty()) {
throw underflow();
}
Object result = front().retrieve();
Single_node<Object> *ptr = list_head;
list_head = list_head->next();
delete ptr;
return result;
}
这将在删除第一个节点之前获取结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。