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

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

Войти
Регистрация
Восстановить пароль
 
iron-mik
2 / 2 / 0
Регистрация: 20.11.2010
Сообщений: 52
#1

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

09.12.2011, 18:37. Просмотров 368. Ответов 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++
Здравствуйте! Стоит задача создать несколько потоков, которые будут выполнять какие-то действия. У Шлее (профессиональное...

Почему не заполняется список? - C++
void HashTable::insert(int student_number, std::string f_name, std::string m_name, std::string l_name, std::string debts) { ...

Почему не сортирует список? - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;conio.h&gt; using namespace std; struct Node //структура, являющаяся звеном...

В CListCtrl почему-то не отображается список. - C++
Подскажите пожалуйста что не так? В OnCreate'е главного окна пишу: CListCtrl list; list.Create(LVS_ICON|LVS_REPORT|WS_VISIBLE, ...

Связанный список. Почему nextPtr постоянно 0? - C++
динамический связный список не пойму почему nextPtr( 0 ) постоянно равно 0!? и при этом программа работает со списком добавляет,...

Связный список, почему не работает поиск - C++
#include &lt;iostream&gt; using namespace std; class Node{ public: int data; Node * next; Node(int x){ ...

Почему не работает сортировка? (кольцевой список) - C++
Подскажите ,почему не работает сортировка. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cctype&gt; ...

Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему? - C++
Друзья! Короче создал ПРОСТОЙ класс всего с одним полем и функцией которая выводит значение этого поля. Создал массив из 2-х указателей на...

Односвязный список в список - C++
Всем привет. Гугл мне ответа не дал. Не понимаю, как один список вставить в другой и как передвигаться по нему? В одном списке хранится...

как реализовывается - Delphi
point (p,a,b) // р - модуль x:=0; while (x&lt;p) w:=(x^3+ax+b) mod p // w - это у^2 if (w - целое значение квадратного корня Zр)...

Не реализовывается идея полноэкранного отображения - HTML, CSS
Друзья, создаю сайт и хочу сделать так, чтобы скролинг был не по пиксельный а по высоте экрана. Есть какой-то якорь или как сделать,...

Пример из книги Харта не реализовывается - C++ WinAPI
Выдает ошибку fatal error LNK1120: 1 unresolved externals пример из книги харта нереализовывается,помогите исправить Пример:...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 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.
Ответ Создать тему
Опции темы

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