【问题标题】:Removing First element of linked list in C在C中删除链表的第一个元素
【发布时间】: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 questionthis question
  • 同意如果你想修改调用函数中的指针,你必须操作一个指向你没有提供的指针(列表**节点)的指针,然后调用remove_element的代码,也许你会在那里找到一个错误。

标签: c memory-leaks linked-list malloc singly-linked-list


【解决方案1】:

您可以阅读此 pdf 中有关 Push 功能的说明: http://cslibrary.stanford.edu/103/

这就是 c 在心理学上变得时髦的地方。您本能地想要将指针标记为指针,它就是。但它是一个指针值,而不是指针引用。这就像C神性的圣灵。三巨头。 C 通过值而不是地址/引用将参数传递给函数。那么,如何通过引用传递变量呢?请记住,解决方案是如此明显,我对我发誓一个星期真的没有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多