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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
#1

Ошибка при добавлении элемента в список - C++

01.05.2014, 18:26. Просмотров 173. Ответов 3
Метки нет (Все метки)

Первый элемент всегда выводится правильно, у второго почему-то портится указатель. Третий вообще куда-то исчезает.

Структура:
C++
1
2
3
4
5
6
struct Rastenie
{
    char nazvanie[30], klass[30], strana[30];
    bool esti;
    Rastenie *sled;
};
Добавление элемента в список:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Dobaviti(Rastenie *&pervyi)
{
    Rastenie *novyi = new Rastenie;     // создаем новый элемент
    novyi->sled = pervyi;               // добавляем его в начало
    pervyi = novyi;
 
    fflush(stdin);                      // очищаем поток ввода, чтобы в нем не застрял '\n'
    printf("Название: ");               // читаем поля
    fgets(novyi->nazvanie,30,stdin);
    novyi->nazvanie[strlen(novyi->nazvanie)-1] = 0;
    printf("Класс: ");
    fgets(novyi->klass,30,stdin);
    novyi->klass[strlen(novyi->klass)-1] = 0;
    printf("Страна: ");
    fgets(novyi->strana,30,stdin);
    novyi->strana[strlen(novyi->strana)-1] = 0;
    printf("Раньше существовал - 0, сейчас произрастает - 1: ");
    scanf("%i",&novyi->esti);
    printf("\nЭлемент добавлен!\n");
    system("pause");
}
Вывод, если что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Vyvod(Rastenie *pervyi)
{
    if (pervyi == NULL)
    {
        printf("Список пуст!\n");
        system("pause");
        return;
    }
 
    Rastenie *tek = pervyi;
 
    printf("+--------------------------------------------------------------------+\n");
    printf("| %15s | %15s | %15s | %12s |\n","Название","Класс","Страна","Произрастает");
    while (tek != NULL)
    {
        printf("| %15s | %15s | %15s | %12s |\n",tek->nazvanie,tek->klass,tek->strana,
            (tek->esti? "да" : "нет"));
        tek = tek->sled;
    }
    system("pause");
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 18:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при добавлении элемента в список (C++):

Ошибка при добавлении элемента в связный список - C++
Помогите найти ошибку в программе,добавляю элементы в связный список,и если использую второй push_back он его добавляет,даже делает...

Heap corruption detected при добавлении нового элемента в однонаправленный список - C++
Метод add на вход получает строку, затем ищет в списке такой элемент и добавляет новое звено списка. При добавлении нового элемента...

Ошибка при добавлении данных в список - C++
Здравствуйте! Имею вот такую конструкцию по добавлению данных в список (таблицу): TVedushiy *vedushiy; vedushiy = new TVedushiy(); ...

Ошибка при добавлении объектов в список - C++
Добрый день. Задача: 1. Определить иерархию классов (в соответствии с вариантом). 2. Определить в классе статическую компоненту -...

Ошибка при добавлении элемента в динамический массив - C++
Всем привет! Создал класс для работы с дин.массивом. Нормально компилируется и выводит массив, но когда добавляю новый элемент, выдает...

Ошибка при добавлении элемента в конец дека - C++
2 игрока берут из своих колод по 1-й карте. Т.е. достают элемент дека из начала дека. В данном случае пока неважно сколько раз это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,818
01.05.2014, 20:35 #2
Цитата Сообщение от Керра Посмотреть сообщение
у второго почему-то портится указатель.
Вы имеете ввиду поле структуры Rastenie::sled ?
Тогда можно с помощью отладчика установить, где это происходит.
Можно установить breakpoint в функции Dobaviti() и в Vyvod() (внутри цикла while).
Правильные ли там значения sled ?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23566 / 15561 / 4603
Регистрация: 22.10.2011
Сообщений: 27,590
Записей в блоге: 5
01.05.2014, 21:06 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Керра, компилятор же выдает предупреждение, не надо для ввода bool-а пользоваться строкой "%i". Вводи int, и потом переноси его в поле записи. Это починит указатели. По крайней мере, у меня на gcc это исправление привело к нормализации вывода.
1
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
01.05.2014, 21:17  [ТС] #4
UI, понятно, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2014, 21:17
Привет! Вот еще темы с ответами:

Программа вылетает при добавлении элемента - C++
Написал программу Car, в которой реализовал функции Add и Delete нового авто, только из-за какого-то исключения нарушаются права доступа и...

Программа вылетает при добавлении элемента - C++
Здравствуйте ув. форумчане. Есть у меня в программе массив первого и второго типа. При начальном создание (мы выбераем сами количество...

Что происходит при удалении/добавлении элемента в контейнер vector? - C++
Объясните пожалуйста, какие этапы проходят при добавлении и удалении элемента из контейнера

Почему при добавлении в вектор нового элемента capacity увеличивается с запасом? - C++
Почему vector.size() не всегда равен vector.capacity()? Можно же было в реализации вектора при добавлении нового элемента перераспределять...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.05.2014, 21:17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru