【发布时间】:2020-02-14 22:46:12
【问题描述】:
看似简单的 C 代码似乎不允许我从链表中删除第一个元素。但是,我可以成功删除任何其他单个元素,并且可以成功删除整个链表。
typedef struct list{
int data;
struct list * next;
} list;
void remove_element(list * node, unsigned int index){
if (node == NULL)
exit(-1);
list *currElem = node;
if (index == 0) {
node = node->next;
currElem->next = NULL;
free(currElem);
return;
}
产生以下内容: "free(): 无效指针:0xbfabb964"
我对所有其他操作函数都遵循了相同的格式,没有任何问题。论坛上的类似主题似乎没有解决这个特定问题。
【问题讨论】:
-
设置
node = node->next什么也没做,因为所做的只是更改node的本地副本。例如,请参阅this question 或 this question。 -
同意如果你想修改调用函数中的指针,你必须操作一个指向你没有提供的指针(列表**节点)的指针,然后调用remove_element的代码,也许你会在那里找到一个错误。
标签: c memory-leaks linked-list malloc singly-linked-list