Форум программистов, компьютерный форум CyberForum.ru

Удаление элемента структуры - C++

Восстановить пароль Регистрация
 
alexeYesterday
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 30
14.02.2014, 21:37     Удаление элемента структуры #1
Есть код. Удаляет заданный элемент структуры.
C++
1
2
3
4
5
6
7
8
9
void list_del(list_head *list, int i){
    if(list->head==NULL){printf("Список не содержит элементов.");return;}
    list_node *current = list->head;
    for (int j=0; j<i-1;j++){
        current = current->next;}
    list_node *temp = current->next;
    current->next=temp->next;
    free(temp->data);
    free(temp);}
Но есть проблема, если удалять последний элемент то в него заносится мусор. Программа завершается, подскажите пожалуйста как бы исправить данный баг.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2014, 21:37     Удаление элемента структуры
Посмотрите здесь:

C++ Удаление записи из структуры
C++ вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
C++ Удаление структуры из файла
C++ Удаление элемента из списка и поиск элемента
C++ Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств )
C++ Удаление элемента структуры
C++ Удаление элемента структуры для правильного считывания WAV-файла
Сделать добавление элемента в массив и удаление элемента из массива используя STL C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,180
Завершенные тесты: 1
14.02.2014, 21:46     Удаление элемента структуры #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    for (int j=0; j<i-1;j++)
    {
        if(current->next->next==NULL)//освобождение последнего
        {
           list_node *temp = current->next;
           current->next=NULL;
           free(temp->data);
           free(temp);  
           return;          
        }
        current = current->next;
    }
    list_node *temp = current->next;
    current->next=temp->next;
    free(temp->data);
    free(temp);}
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
14.02.2014, 21:47     Удаление элемента структуры #3
для последнего элемента в списке должно выполняться условие:
C++
1
current->next == NULL
видимо у вас это не так. хотя сложно утверждать имея лишь этот кусок кода
Yandex
Объявления
14.02.2014, 21:47     Удаление элемента структуры
Ответ Создать тему
Опции темы

Текущее время: 17:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru