单链表实现删除当前结点,内存出错了

才不是本人 2018-11-15 06:51:15
#include <iostream>
#include <algorithm>
using namespace std;

template < typename T>
class Node{
public:
~Node();
Node<T>* next{nullptr};
T data;
};

template <typename T>
Node<T>::~Node()
{
delete next;
next = nullptr;
}

template <typename T>
void insert(Node<T>* s, T data)
{
if(s == nullptr) return;
Node<T>* p = new Node<T>();
p->next = s->next;
s->next = p;
p->data = s->data;
s->data = data;
}
template <typename T>
void erase(Node<T>* s)
{
if(s == nullptr || s->next == nullptr) return;
Node<T>* p = s->next;
s->data = p->data;
s->next = p->next;
delete p;
p = nullptr;
}

int main()
{
auto head = new Node<int>();
head->data = -1;
auto t = new Node<int>();
head->next = t;
t->data = 4;
insert(t, 8);
insert(t, 9);
insert(t, 5);
insert(t, 1);
Node<int>* s = head;
while(s)
{
cout<< s <<":"<<s->data <<" ";
s = s->next;
}
cout << endl;
Node<int>* p = head->next;
erase(p);
Node<int>* x = head;
while(x)
{
cout<< x <<":"<<x->data <<" ";
x = x->next;
}
cout << endl;
return 0;
}
...全文
47 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
才不是本人 2018-11-15
  • 打赏
  • 举报
回复
原因出现在析构函数释放了next指向的空间
才不是本人 2018-11-15
  • 打赏
  • 举报
回复
0xb2c010:-1 0xb2c030:1 0xb2c0b0:5 0xb2c090:9 0xb2c070:8 0xb2c050:4 0xb2c010:-1 0xb2c030:5 0xb2c090:9 0xb2c060:33 这是结果

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧