删除链表结点时不释放的内存重新启动计算机后会释放吗?
答案:2 信息版本:手机版
解决时间 2019-10-06 11:30
已解决
2019-10-05 21:37
建立链表时占用的内存除了用FREE一个一个结点释放外还有别的方法没,比如重启?
最佳答案
2019-10-05 22:25
理论上,当你结束该程序时,系统就会释放你申请的空间,不过,这是很不好的习惯,这些空间应该由你释放。
全部回答
1楼
2019-10-05 23:38
bool linearlist::remove(const int data)
{
node curr;
node prev;
if (isempty())
{
std::cout <
return false;
}
else if (_first->data == data)
{
curr = _first;
_first = _first->next;
delete curr;
_length--;
return true; //
//不再查找后面符合条件的节点,从你的问题来看,似乎
//想把链表中所有符合条件的节点都删了
}
else
{
for (curr = _first, prev = null;
curr != null; prev = curr, curr = curr->next)
// 不能直接用curr=curr->next循环赋值,否则当curr被释放后,
// curr->next引用会出错.
{
if (curr->data == data)
{
prev->next = curr->next;
// 在使用prev指针前必须判断它是否为null,否则会出现运行时错误
_length--;
//
}
}
//
delete curr; // 否则会出现释放null指针出错
return true;
}
}
// 修正如下,没有测试,请自行调试:
bool linearlist::remove(const int data)
{
node curr;
node prev;
bool bret = false;
if (isempty())
{
std::cout <
return bret;
}
else
{
for (curr = _first, prev = null;
curr != null; )
{
if (curr->data == data)
{
if (curr == _first ) _first = curr ->next;
if (prev != null ) prev->next = curr->next;
_length--;
delete curr;
bret = true;
if (prev != null ) curr = prev->next;
else curr = _first;
}
else
{
prev = curr;
curr = curr->next;
}
}
}
return bret;
}
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯