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

Почему не реализовывается список? - C++

Восстановить пароль Регистрация
 
iron-mik
2 / 2 / 0
Регистрация: 20.11.2010
Сообщений: 52
09.12.2011, 18:37     Почему не реализовывается список? #1
Пытаюсь для начала создать список из 2-ух элементов, но не получается
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
31
32
33
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include "iostream"
#include "conio.h"
 
using namespace std;
 
struct Spos
{
    int val;
    Spos* next;
};
 
void AddInSpisok(Spos* pS)
{
    Spos _new;
    _new.val = 2;
    _new.next = NULL;
 
    pS->next = &_new;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    Spos sp1;
 
 
    sp1.val = 1;
 
    AddInSpisok(&sp1);
 
    Spos* ch = &sp1;
 
    while(ch != NULL)
    {
        cout<<ch->val<<endl;
        ch = ch->next;
    }
 
    getch();
    return 0;
}
В итоге выводит примерно это:
1
237235474 (как я понял это адрес ячейки)
237456541
Хотя должно вывести только:
1
2

Объясните пожалуйста - что я не так делаю?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2011, 18:37     Почему не реализовывается список?
Посмотрите здесь:

Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему? C++
Почему не взяли на обучение в CQG, на сайте нашел испытательное задание, сделал и отослал. Не взяли и не объяснили почему. Хочу услышать мнения. C++
Почему MS-DOS не любит кириллицу ? (Или почему она не любит меня ?) C++
В CListCtrl почему-то не отображается список. C++
C++ Преобразовать список рёбер в список смежностей
Связанный список. Почему nextPtr постоянно 0? C++
C++ Связный список, почему не работает поиск
Односвязный список в список C++
Как правильно реализовывается многопоточность C++
Почему не сортирует список? C++
C++ Почему не заполняется список?
C++ Почему не работает сортировка? (кольцевой список)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.12.2011, 21:18     Почему не реализовывается список? #2
Все дело в ф-ии AddInSpisok.
C++
1
2
3
4
5
6
7
void AddInSpisok(Spos* pS)
{
  Spos _new;
  _new.val = 2;
  _new.next = NULL;
  pS->next = &_new;
}
смотрим на строку
pS->next = &_new;

Переменная _new - локальная (на стеке). т.е. в список вы засовываете адрес локальной переменной. После выхода из эта переменная исчезает. Память, в которой она находилась начинает использоваться для других нужд. В общем тут нужно понимать разницу между локальными (на стеке) объектами и объектами в динамической памяти.
Исправляется так:
C++
1
2
3
4
5
6
7
void AddInSpisok(Spos* pS)
{
  Spos* _new = new Spos();
  _new->val = 2;
  _new->next = NULL;
  pS->next = _new;
}
Не забываем о том, что все, что выделено через new должно быть удалено через delete.
Yandex
Объявления
09.12.2011, 21:18     Почему не реализовывается список?
Ответ Создать тему
Опции темы

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