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

Почему не реализовывается список? - 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) max = i; int min = max+1; for (int i = min; i <= size; i++)
C++ динамическое выделение памяти
Выполнить задание используя динамическое выделение памяти: Данная целочисленная прямоугольная матрица. Определить: -количество строк, содержащих хотя бы один нулевой элемент; -номер столбца , в котором находится самая длинная серия одинаковых элементов. Спасыбо.
C++ Вывести все четные элементы массива стоящие на не четных местах http://www.cyberforum.ru/cpp-beginners/thread402976.html
Вводится массив из 10 элементов. Вывести все четные элементы массива стоящие на четных местах
C++ ошибка в коде разветвленной функции короче тут такая проблема я работаю на visual c++ 2010, задачка такая: "Если сумма трех попарно различных действительных чисел X, Y, Z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других; в противном случае заменить меньшее из X, Y полусуммой двух оставшихся значений." // 2.20.1.cpp : Defines the entry point for the console application. // #include "stdafx.h"... подробнее

Показать сообщение отдельно
DU
1478 / 1054 / 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.
 
Текущее время: 01:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru