Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
1

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

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

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

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

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

Не могу понять как делать данные задачи.Очень надо(
1. Написать программу-функцию, используя условный оператор if: Даны x,y,z. Найти max(x+y+z,...

Где надо разместить CGi скрипт и как это делать?
где надо разместить CGi скрипт и как это делать?

14
1662 / 1131 / 80
Регистрация: 21.08.2008
Сообщений: 4,724
Записей в блоге: 1
11.04.2011, 09:25 2
Вывод? Делать через указатели?
0
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
11.04.2011, 09:59  [ТС] 3
Бесконечная рекурсия:
C++
1
2
3
4
long int factorial (int n)
{
 return factorial(n-1)*n;
}
. Если нет ветвления, то рекурсия гарантировано переполнит стек.
0
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
11.04.2011, 14:23 4
Лучший ответ Сообщение было отмечено как решение

Решение

здесь что? ЖЖ Капитана Очевидность?
6
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
12.04.2011, 09:47  [ТС] 5
slice, если для тебя такие ляпы очевидны, то флаг тебе в руки.
0
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
12.04.2011, 09:55 6
taras atavin, а что, для кого-то не очевидны?
0
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
12.04.2011, 09:58  [ТС] 7
Возврат ссылки на временный объект:
C++
1
2
3
4
5
6
int &f ()
{
 int t;
 ...
 return t;
}
. Перед действительным завершением функции и выходом из неё переменная t уничтожается, но функция возвращает её адрес.
0
Формучанин
362 / 293 / 41
Регистрация: 02.11.2010
Сообщений: 1,234
12.04.2011, 12:49 8
ага, ссылка на временный объект, который лежит в стеке, и может использоваться не дальше след вызова длинной функции.

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

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

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

Добавлено через 1 минуту
на самом деле отсутствие очистки стека(самих значений) это правильно, в плане быстродействия.
0
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
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 должен ещё и деструткор поработать, а он мог поменять поля объекта.
0
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
12.04.2011, 20:30 14
taras atavin, ага, а если так сделать

C++
1
2
3
4
 ~A()
 {
    delete this;
 }
то ой что будет!
2
taras atavin
13.04.2011, 06:42  [ТС]     Наглядные пособия, как делать не надо.
  #15

Не по теме:

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

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

0
13.04.2011, 06:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 06:42
Привет! Вот еще темы с ответами:

надо в режиме sql сделать отчет с запросами на дату. а я не знаю как это делать.(
мне надо в режиме sql сделать отчет с запросами на дату. В отчет у меня идут три запроса. физ лица,...

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

Что мне делать или что надо знать перед тем как начать изучение яз.программирования С/С++?
Я пока вообще не умею программировать.Сначала хотел с бейсика или паскаля.Но многие советуют...

Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать
#include "stdafx.h" #include <iostream> #include <conio.h> #include <Windows.h> #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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