【发布时间】:2012-12-06 13:47:49
【问题描述】:
!=我目前正在处理以下擦除递归布尔函数,该函数将 list 和 int 作为参数,如果找到并删除了 int,则返回 true,如果在列表中找不到它,则返回 false。它似乎工作,但问题是它删除了列表中的下一个int数,并且不是当前:
typedef struct E_Type * List;
struct E_Type
{
int data;
List next = 0;
};
bool erase(const List & l, int data){
List current = l;
if (current == 0)
{
return false;
}
else if (current->data == data)
{
List deleteNode = new E_Type;
deleteNode = current->next;//probably this causes the error, but how can I point it to the current without crashing the program
current->next = deleteNode->next;
delete deleteNode;
return true;
}
else if (current->data != data)
{
return erase(current->next, data);
}
}
【问题讨论】:
-
可能不相关:
List deleteNode = new E_Type; deleteNode = current->next;?这就是内存泄漏。 -
另外一个不相关的评论:
else if (current->data > data)的目的是什么?反正return语句是一样的。 -
声明
if (current == 0)将不起作用,除非List被 typedef 为指针类型,或者该类有一个重载的==运算符,该运算符采用指针/整数。跨度> -
@Joachim 是的 List 是 typedef 指针指向 E_Type / R.Martinho 你是对的,我会修复这个泄漏,谢谢
-
您的代码可能存在更多错误和问题,为什么不直接使用
std::list(或者更好的是std::vector)?
标签: c++ linked-list