首页 > 解决方案 > 在C中删除链表的第一个元素

问题描述

看似简单的 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(): invalid pointer: 0xbfabb964”

我对所有其他操作功能都遵循了相同的格式,没有任何问题。论坛上的类似主题似乎没有处理这个特定问题。

标签: cmemory-leakslinked-listmallocsingly-linked-list

解决方案


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

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


推荐阅读