Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Преобразовать последовательность чисел так, чтобы сначала были нули, а потом все остальные. http://www.cyberforum.ru/cpp-beginners/thread403033.html
Тема лабораторной работы: Работа с одномерными массивами. Задание: Преобразовать последовательность чисел так, чтобы сначала были нули, а потом все остальные.
C++ Рекурсивно вычислить количество цифр в строке Задача: Разработать рекурсивную функцию, возвращающую значение: для вычисления количества цифр в строке; с помощью данной функции определить, в каком из двух предложений цифр больше. (Учитывая,... http://www.cyberforum.ru/cpp-beginners/thread403032.html
Граммотное пояснение. C++
Здравствуйте форумчане! Помогите пожалуйста грамотно (!) объяснить действия выполняющиеся в этом куске программы. { int max = 1; for (int i = 2; i <= size; i++) if (ar > ar) ...
C++ Динамическое выделение памяти
Выполнить задание используя динамическое выделение памяти: Данная целочисленная прямоугольная матрица. Определить: -количество строк, содержащих хотя бы один нулевой элемент; -номер столбца , в...
C++ Вывести все четные элементы массива стоящие на не четных местах http://www.cyberforum.ru/cpp-beginners/thread402976.html
Вводится массив из 10 элементов. Вывести все четные элементы массива стоящие на четных местах
C++ ошибка в коде разветвленной функции короче тут такая проблема я работаю на visual c++ 2010, задачка такая: "Если сумма трех попарно различных действительных чисел X, Y, Z меньше единицы, то наименьшее из этих трех чисел заменить... подробнее

Показать сообщение отдельно
DU
1485 / 1131 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.12.2011, 21:18
Все дело в ф-ии 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.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru