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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Наглядные пособия, как делать не надо. - C++

11.04.2011, 07:38. Просмотров 1280. Ответов 14
Метки нет (Все метки)

Не допускается рекурсия типа данных, например:
C++
1
2
3
4
5
6
struct TTree
{
 double Data;
 TTree Left;
 TTree Right;
};
, так как в этом случае потомки окажутся у всех узлов, из-за чего коряга должна быть бесконечной, но память любого компа ограничена. В связи с этим подобное вложение типа в себя запрещено правилами языка, так как его всё равно нельзя будет скомпилить.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2011, 07:38     Наглядные пособия, как делать не надо.
Посмотрите здесь:

Наглядные пособия, как делать не надо - C++
int *function (int s) { int *p; p=new int ; delete p; return p; } int *function (int s) { int r;

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

Загрузка файла в компонент Outline: Как определить что цикл больше делать не надо - C++ Builder
Подскажите еще такой момент (гугл не может ничего найти). Есть на форме компонента Outline1, загружаю туда файл: TMemoryStream*...

Ошибки в программе вычисления пособия работника (Лафоре) - C++
Прошу проверить правильность решения задания из книги Лафоре 4. Создайте структуру с именем employee, содержащую два поля: номер со-...

Не мог бы кто-нибудь дать пособия для 1 курса с++ - C++
Не мог бы кто-нибудь помочь дать материал по программированию С++ для первого курса.

Как с помощью animation делать копирующие анимации, как в windows 7 - C++ Builder
сначала с помощю adobe flash player делат анимации и потом как поставить его на animation у мне получается на .swf

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
11.04.2011, 09:25     Наглядные пособия, как делать не надо. #2
Вывод? Делать через указатели?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.04.2011, 09:59  [ТС]     Наглядные пособия, как делать не надо. #3
Бесконечная рекурсия:
C++
1
2
3
4
long int factorial (int n)
{
 return factorial(n-1)*n;
}
. Если нет ветвления, то рекурсия гарантировано переполнит стек.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
11.04.2011, 14:23     Наглядные пособия, как делать не надо. #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
здесь что? ЖЖ Капитана Очевидность?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2011, 09:47  [ТС]     Наглядные пособия, как делать не надо. #5
slice, если для тебя такие ляпы очевидны, то флаг тебе в руки.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
12.04.2011, 09:55     Наглядные пособия, как делать не надо. #6
taras atavin, а что, для кого-то не очевидны?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2011, 09:58  [ТС]     Наглядные пособия, как делать не надо. #7
Возврат ссылки на временный объект:
C++
1
2
3
4
5
6
int &f ()
{
 int t;
 ...
 return t;
}
. Перед действительным завершением функции и выходом из неё переменная t уничтожается, но функция возвращает её адрес.
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
12.04.2011, 12:49     Наглядные пособия, как делать не надо. #8
ага, ссылка на временный объект, который лежит в стеке, и может использоваться не дальше след вызова длинной функции.

Добавлено через 2 минуты
при выходе переменная не уничтожается, очищается стек(в котором переменная), путём изменения значения esp

Добавлено через 1 минуту
тьфу блин не так тему понял

Добавлено через 33 секунды
лучше бы ты делал примеры "как надо делать"
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
12.04.2011, 12:50     Наглядные пособия, как делать не надо. #9
Цитата Сообщение от taras atavin Посмотреть сообщение
Перед действительным завершением функции и выходом из неё переменная t уничтожается
ну что за глупость. где лежал твой int там и будет лежать. А вот при последующих операциях со стеком переменная, конечно, может затереться другими значениями.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2011, 12:50  [ТС]     Наглядные пособия, как делать не надо. #10
Цитата Сообщение от nxnx Посмотреть сообщение
при выходе переменная не уничтожается, очищается стек(в котором переменная), путём изменения значения esp
.Эйси, очистил ты стек, в нём валялась переменная. Где теперь эта переменная? Даже если по тому адресу по-прежнему валяется правильное значение, оно уже мусорное, а перемнной нет, а первый же вызов другой функции испортит даже этот хвост от функции.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2011, 12:52  [ТС]     Наглядные пособия, как делать не надо. #11
Цитата Сообщение от slice Посмотреть сообщение
ну что за глупость. где лежал твой int там и будет лежать.
Лежать там будет некий мусор, значение которого хоть и совпадает с интом, но инта уже нет, а совпадение в стандарте не прописано, а является лишь побочным следствеим оптимизации: границу стека двинули, а то, что в нём валяется не стёрли.
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
12.04.2011, 12:56     Наглядные пособия, как делать не надо. #12
Цитата Сообщение от taras atavin Посмотреть сообщение
.Эйси, очистил ты стек, в нём валялась переменная. Где теперь эта переменная? Даже если по тому адресу по-прежнему валяется правильное значение, оно уже мусорное, а перемнной нет, а первый же вызов другой функции испортит даже этот хвост от функции.
вобщемто я тоже самое и написал, только другими словами.
Лучше делай пояснения почему так нельзя. а то поиск проиндексирует твой пост по фразе
"ссылка на временный объект" и все будут делать так как в твоём примере.

Добавлено через 1 минуту
на самом деле отсутствие очистки стека(самих значений) это правильно, в плане быстродействия.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2011, 12:59  [ТС]     Наглядные пособия, как делать не надо. #13
Кстати, если сделать ещё смешнее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A
{
 A()
 {
  ...
 }
 ~A()
  {
  ...
 }
 ...
};
A &f()
{
 A a;
 return a;
}
, то над a должен ещё и деструткор поработать, а он мог поменять поля объекта.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
12.04.2011, 20:30     Наглядные пособия, как делать не надо. #14
taras atavin, ага, а если так сделать

C++
1
2
3
4
 ~A()
 {
    delete this;
 }
то ой что будет!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 06:42     Наглядные пособия, как делать не надо.
Еще ссылки по теме:

Надо создать 9 программ СРОЧНО НАДО ПЛИЗЗ - C++ Builder
Помогите создать 9 программ СРОЧНО НАДО ПЛИЗЗ 1. Постановка задачи: создать проект программы с тремя формами. Одна форма главная,...

как делать? - Visual C++
http://khpi-iip.mipk.kharkiv.edu/lib...lab/index.html c 6 по 12, вариант первый, завтра нужно сдать..)):-|

подскажите как делать лб - C++ Builder
Помогите пожалуйста разобраться с данным заданием! 1. Создайте новый проект. 2. Поместите на форме все компоненты С++ Builder,...

Как делать правильнее? - C++
Есть класс, допустим, "Фигура" class Shape { protected: int xpos; int ypos; public: /* Здесь деструкторы и...


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

Или воспользуйтесь поиском по форуму:
taras atavin
13.04.2011, 06:42  [ТС]     Наглядные пособия, как делать не надо.
  #15

Не по теме:

Цитата Сообщение от slice Посмотреть сообщение
taras atavin, ага, а если так сделать

C++
1
2
3
4
 ~A()
 {
    delete this;
 }
то ой что будет!
Класная фигня! И точно по теме.

Yandex
Объявления
13.04.2011, 06:42     Наглядные пособия, как делать не надо.
Ответ Создать тему
Опции темы

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