Форум программистов, компьютерный форум 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, 06:31     Указатель в списке ссылается на себя, а не на следующий элемент
Уважаемые, форумчане!
Помогите разобраться в вопросе.
Я хочу реализовать стек(добавление элемента) на основе односвязного списка.
Предварительно почитав как это делается, я решил а почему бы не сделать по другому,
И начал изобретать велосепед, но он не едит, а еще страшнее я не поняимаю почуму.

Ниже часть кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
struct List
{
    int data;
    List* next;
};
 
void push(List* stack, int value);
 
int main()
{
    struct List stack;
    stack.data = 2;
    stack.next = NULL;
    push(&stack, 1);
    push(&stack, 3);     //проблема
    return 0;
}
 
void push(List* stack, int value)
{
    List temp;
    temp = *stack;
    stack -> data = value;
    stack -> next = &temp;
 
}
При первом вызове функции у меня stack = 1--->2---> NULL
Но при втором вызове stack = 1---->1---->1 ----> ...... ---->1 .....
а я то ждал 3--->1---->2---->NULL
Объясните пожалуйста.

Выписка из дебагера говорит, что temp->next указывает на себя же, но я не понимаю как так получается.



Breakpoint 1, main () at stack.cpp:20
20 push(&stack, 1);
(gdb) s
push (stack=0xbffff1d8, value=1) at stack.cpp:39
39 temp = *stack;
(gdb)
40 stack -> data = value;
(gdb)
41 stack -> next = &temp;
(gdb) p temp
$15 = {data = 2, next = 0x0}
(gdb) p &temp
$16 = (List *) 0xbffff1b0
(gdb) p stack
$17 = (List *) 0xbffff1d8
(gdb) p stack->next
$18 = (List *) 0x0
(gdb) s
43 }
(gdb) p stack->next
$19 = (List *) 0xbffff1b0
(gdb) p (*stack->next)->data
$20 = 2
(gdb) p (*stack->next)->next
$21 = (List *) 0x0
(gdb) s
main () at stack.cpp:21
21 push(&stack, 3);
(gdb) p stack
$22 = {data = 1, next = 0xbffff1b0}
(gdb) p (*stack.next).data
$23 = 2
(gdb) p (*stack.next).next
$24 = (List *) 0x0
(gdb) s
push (stack=0xbffff1d8, value=3) at stack.cpp:39
39 temp = *stack;
(gdb) s
40 stack -> data = value;
(gdb) s
41 stack -> next = &temp;
(gdb) p temp
$25 = {data = 1, next = 0xbffff1b0}
(gdb) p (*temp.next).next
$26 = (List *) 0xbffff1b0
(gdb) p (*temp.next).data
$27 = 1
(gdb) p (*(*temp.next).next).data
$28 = 1
(gdb) p (*(*(*temp.next).next).next).data
$29 = 1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru