Elem* p;
p = new Elem; // 1
p->info = 1; // 2
p->link1 = NULL; // 3
p->link2 = new Elem; // 4
p->link2->info = 2; // 5
p->link2->link1 = new Elem; // 6
p->link2->link1->info = 4; // 7
p->link2->link1 = p; // 8
p->link2->link1->link2 = new Elem; // 9 < Функция останавливается
p->link2->link1->link2->info = 3; // 10 <
p->link2->link1->link2->link1 = p; // 11
p->link2->link1->link2->link1 = p->link2; // 12
p->link2->link1 = p->link1; // 13
C/C++
В чем здесь проблема? Подскажите пж. (структури даних) С++ Спасибо!
По-моему Вы просто запутали себя… Предлагаю Вам использовать мнемонические имена, чтобы не путаться в них.
Значит, Вы пытаетесь построить двусвязный список. Если верить строкам // 1, // 2, // 3, // 4, // 5, связь со следующим элементом списка осуществляется через поле link2. Однако, в строке // 6 Вы создаёте ещё один элемент, присваивая его адрес полю link1. Вот здесь Вы и нарушили свою собственную логику!
Думаю, поле link1 любого элемента списка должно указывать на предыдущий элемент. У Вас это реализовано в строке // 8 .
Правильный вариант строки // 6 скорее всего такой:
p->link2->link2 = new Elem; // 6
А теперь посмотрите, к чему приводят следующие две строки:
p->link2->link1 = p; // 8
p->link2->link1->link2 = new Elem; // 9 < Функция останавливается
Вы теряете прежнее значение p->link2
ГЕНЕРАЛЬНЫЙ СОВЕТ: вернитесь к изучению теории и постарайтесь понять её правильно.
Значит, Вы пытаетесь построить двусвязный список. Если верить строкам // 1, // 2, // 3, // 4, // 5, связь со следующим элементом списка осуществляется через поле link2. Однако, в строке // 6 Вы создаёте ещё один элемент, присваивая его адрес полю link1. Вот здесь Вы и нарушили свою собственную логику!
Думаю, поле link1 любого элемента списка должно указывать на предыдущий элемент. У Вас это реализовано в строке // 8 .
Правильный вариант строки // 6 скорее всего такой:
p->link2->link2 = new Elem; // 6
А теперь посмотрите, к чему приводят следующие две строки:
p->link2->link1 = p; // 8
p->link2->link1->link2 = new Elem; // 9 < Функция останавливается
Вы теряете прежнее значение p->link2
ГЕНЕРАЛЬНЫЙ СОВЕТ: вернитесь к изучению теории и постарайтесь понять её правильно.
+ тут однозначно есть утечка памяти.
p = new Elem; //ok
p->link2 = new Elem; // ok link2 создался
....
p->link2->link1 = p; // Вы только что сделали кольцевую ссылку
....
p->link2->link1->link2 = new Elem;
но p->link2->link1 = p! соотв. Вы не освобождая памяти от p->link2 снова выделяете память
p = new Elem; //ok
p->link2 = new Elem; // ok link2 создался
....
p->link2->link1 = p; // Вы только что сделали кольцевую ссылку
....
p->link2->link1->link2 = new Elem;
но p->link2->link1 = p! соотв. Вы не освобождая памяти от p->link2 снова выделяете память
объясни, что происходит на строчке // 8
+ покажи определение Elem
Похожие вопросы
- Исправьте мой код, пж! Я не понемаю что не так!!! Задолбался! Я один сиджу по неделях на одной прогорамкой? Спасибо!
- С++ структуры. Помогите ппжпж жпж пж ж
- Помогите задачку зарешать пж
- ПрОВЕРьте код по программированию пж! С/С++
- Помогите дополнить код СИ, пж.
- Спасите помогите, пж. Язык С++. Вся моя группа страдает от кретинизма (как и я)
- Нужен код на Си помогите пж
- Помогите, пж, язык С/С++
- Нужен код на Си помогите пж
- Помогите пж написать код на C++
const Elem * p = new Elem;
И объявите ещё одну переменную, которая сначала будет равна p, а потом будет указывать на каждый последующий элемент. Но значение указателя p не должно меняться.
x->successor = new Elem; // создаётся следующий элемент
x->successor->predecessor = x; // cохраняется обратная ссылка
x = x->successor; // а здесь указатель x переставляется на следующий элемент
___________
Такое можно повторять в цикле!