Удаление первого элемента связанного списка в C - PullRequest
0 голосов
/ 18 октября 2019

Казалось бы, простой 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"

IЯ придерживался того же формата для всех других моих функций манипуляции без проблем. Подобные темы на форумах, похоже, не имеют отношения к этой конкретной проблеме.

1 Ответ

0 голосов
/ 18 октября 2019

Вы можете прочитать объяснение в этом pdf-файле о функции Push, которая объясняет это: http://cslibrary.stanford.edu/103/

Это - то, где c становится психологически в психологическом отношении. Вы инстинктивно хотите пометить указатель как указатель, какой он есть. Но это значение указателя, а не ссылка на указатель. Это как святой дух божества. Триумвират. C передавал аргументы в функции по значению, а не по адресу / ссылке. Итак, что вы делаете, чтобы передать переменную по ссылке? Помните, решение настолько очевидно, что оно действительно не имело смысла для меня в течение недели, клянусь богом.

...