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

Указатель в списке ссылается на себя, а не на следующий элемент - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить событие появления сообщения в программе http://www.cyberforum.ru/cpp-beginners/thread1499026.html
Здравствуйте, необходимо написать программу, которая определяет момент появление ошибки в другом приложении (появляется окно с сообщением, по всей видимости WinAPI). Подскажите, в каком направлении смотреть, может кто-нибудь сталкивался с подобной задачей?
C++ Push_back вектора по указателю - возможно ли Я хочу объявить вектор в одной функции и работать с ним методами в другой. Самый простой путь - объявить вектор глобально, что мне не очень нравится. Второй путь - передать в функцию копию вектора, а потом возвращать его обратно. Мне и этот путь представляется неэстетичным, поэтому я хочу передать указатель на вектор в функцию, написав что-то типа #include <vector> #include <iostream> ... http://www.cyberforum.ru/cpp-beginners/thread1499024.html
Не видно определений функций при раздельной компиляции C++
Описал класс и его наследника в заголовочном файле; самые громоздкие определения функций вынес в отдельные файлы, однако при компиляции/сборке эти определения не видно из файла с "main". Здесь указан код для студии, однако при компиляции из консоли с помощью GCC - результата тоже ноль. Студия ругается на "неразрешенный внешний символ" (подключение всех pdb-файлов, какие нашел в проекте, не...
C++ Const-параметры в аргументах функции
void setAmount(const int _amoutn) А тут уже const излишен, перебор. Добавлено через 3 минуты void setDescription(const std::string& _description) { m_description = _description; } //... std::string& getDescription() { return m_description; } Зачем дублировать?
C++ Что быстрее? Обращение к элементу массива или к элементу структуры? http://www.cyberforum.ru/cpp-beginners/thread1498974.html
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на вызов функции do_nothing получилось примерно такое же. Оптимизация отключена. Верен ли вывод, что обращение к элементу массива, элементу структуры и вызов функции занимают одинаковое время? Использую MinGW 4.4 с Qt 4.7.4. #include <iostream> #include...
C++ Fstream в классах Проблема заключается в том, что я не могу использовать fsream в классе, ибо выдаёт ошибку. Код и текст ошибки ниже. Помогите пожалуйста (мб поможете и с самой задачей, условие ниже). Код весь в костылях))) /*-------------------------------------------------------------------*/ Условие задачи: Создать программу, которая будет добавлять/убирать/просматривать ваших друзей с текстового файла... подробнее

Показать сообщение отдельно
libre
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 4
15.07.2015, 08:22  [ТС]     Указатель в списке ссылается на себя, а не на следующий элемент
Rius, Извиняюсь, но я добавляюю в начало, значит мне надо найти первый элемент.
А вот насчет добавить новый динамический созданный, похоже, и есть ключевой момент, который я недопонимаю тут.
Помогите разобраться, в моей голове картина такая:

Я первый раз вызываю push
C
1
2
3
4
5
6
7
void push(List* stack, int value)    в качестве аргумента передал адрес stack, и значение 2
{
    List temp;    //создается объетк типа struct List, выделяется адрес под переменную
    temp = *stack; //по этому адресу я кладу определенную структуру(которую передал функции) вида {2, *next = NULL}
    stack -> data = value; //я перезаписываю в stack значение = 2.
    stack -> next = &temp; //я перезаписываю адрес указателя, который был null, а теперь ссылается на temp 
}   //  на выходе я ожидаю, что stack из main выглядит так {1 , *next}---->{2, *next}---->NULL (и так есть)
Но теперь я вызываю, второй раз функцию push

C
1
2
3
4
5
6
7
void push(List* stack, int value) //  передаю в stack адрес stack(из main), который указывает на начало {2 ,* next} --->{1, *next}--->NULL
{
    List temp;                            /* по идее должен создаться опять temp, но он был проинициализирован в предыдущий раз и у нас тот же адрес для temp */
    temp = *stack;                    /* в temp я помещаю(перезаписываю старое значение) структуру {2, *next}, и надеюсь next помнит адрес {1, *next} */ 
    stack -> data = value;         // перезаписываю 2 на 3
    stack -> next = &temp;       // перезаписываю next, теперь next ссылается на temp 
 }                                          //  ожидаю, что stack = {3, *next} --->{1, *next} ---> {2, *next} --->NULL , но получаю совсем не то.
Я, конечно написал, функцию с динамическим выделением, она работает,
но выглядит ужасно. Указатель на указатель там-- это ведь извращение.
поэтому решил проще сделать, а тут вон оно как((

Добавлено через 17 минут
vua72,
stack -> next = &temp; <== записал ссылку на локальный объект, в котором к тому же копия всего "стека" из одного элемента.
чувствую где тут проблема кроется))
1. чем плоха ссылка на локальный объект? разве stack.next из main( ) не сошлется на этот адрес?
2. к тому же копия всего "стека" из одного элемента ну да, потом ведь next в этом элементе приведет меня к следующему, и так я буду переходить к следующему.

P.S. не надо лисапеда? Мне не особо симпатичен привычный лисопеде, который ездит к тому же.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{   
    List* stack = NULL;
        push (&begin, 60);
    return 0;
 
void push(List** stack, int val)         
{
    List* start;
    start = new List;
    start -> next = NULL;
    start -> data = val;
    start -> next = *stack;
    *stack = start;
 
}
 
Текущее время: 11:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru