|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
Стек или динамическая память!?28.01.2012, 20:44. Показов 4340. Ответов 29
Метки нет (Все метки)
Добрый вечер всем! Прошу ответить на вопрос (ниже приведен код): почему строка "Test!" выводится на экран? Она же не была создана в дин. памяти, т.е. должна была "загнуться" после 1ой строки main(). Заранее благодарен...
0
|
||||||
| 28.01.2012, 20:44 | |
|
Ответы с готовыми решениями:
29
Стек и динамическая память Динамическая память и стек,различие Память. Стек или куча - есть ли преимущества одного кода над другим? |
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
||||||
| 28.01.2012, 21:17 | ||||||
В общем, Ваша строковая константа просто не была переписана другими переменными. Так как Функция вернула указатель, обращаясь по нему Вы обращаетесь к тому участку памяти где "была" и "возможно есть" эта самая строковая константа. Такой недохак крайне нежелательно использовать. Лучше использовать кучу и самостоятельно высвобождать память.
1
|
||||||
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
| 28.01.2012, 21:48 [ТС] | ||||||
|
Бред... Работает даже с сылками... Все же хотелось бы узнать, почему так!?
1
|
||||||
|
|
|
| 28.01.2012, 21:53 | |
|
Pavel.fromBy, ответ примерно таков.
в теле функции создается временный объект - строковая константа. затем создается еще один объект тоже строковая константа - для возврата. содержимое первой копируется полностью во вторую. затем все верно - первая умирает в теле функции а вторая возвращается.
0
|
|
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
| 28.01.2012, 21:56 [ТС] | ||||||
|
AzaKendler, если мне не изменяет память, то и та, которая вернется, тоже умрет (указатель по крайней мере точно, а на счет строки... эх). Не буду писать код... Так, на пальцах: есть класс Test, есть перегр. оператор+.
0
|
||||||
|
|
||||
| 28.01.2012, 21:59 | ||||
|
Добавлено через 1 минуту Добавлено через 1 минуту
0
|
||||
|
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
|
|
| 28.01.2012, 22:00 | |
|
"Память под строковые литералы выделяется статически, поэтому их возврат из функций безопасен" Б. Страуструп
1
|
|
|
|
|||||||
| 28.01.2012, 22:03 | |||||||
0
|
|||||||
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|
| 28.01.2012, 22:03 | |
|
Ну раз возврат безопасен, значит всё окей...
Ссылки?.. Нет, не слышал. Непредсказуемых последствий вы не наблюдаете потому что сейчас программа содержит 15 строчек. Как только она вырастет до 100500 строчек в одном запуске из ста будет наблюдатся "непредвиденный случай". Наглядный пример - Microsoft Windows Vista.
0
|
|
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
|
| 28.01.2012, 22:15 [ТС] | |
|
Paporotnik, та же фигня проскакивает и с int'ами (я про код в первом посте).
Не по теме: AzaKendler, АААА.... Я запутался... Мое любопытство меня погубит!!!! Сейчас вспомню и напишу. Каша в голове, но operator+ должен возвращать значение, а не ссылку (сейчас буду вспоминать, почему) :)
0
|
|
|
|
|
| 28.01.2012, 22:22 | |
|
Pavel.fromBy, он должен обеспечивать отсутствие лишнего копирования, если это я явно не требуется.
Не по теме: Я встрял:D. Все имитирую оргазм и ухожу с темы
0
|
|
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
| 28.01.2012, 22:40 [ТС] | ||||||
|
Все! Эврика !
На примере того же оператора+.... Выше кем-то было хорошая вещь написана (разъясню в коде):
![]() Не по теме: Хотел посмотреть матч Шараповой и Азаренко в записи, так хрена...:)
0
|
||||||
|
|
|||||||
| 28.01.2012, 22:50 | |||||||
Ты создаешь временные копии объектов. Этого делать не надо, если этого явно не требуется. В твоем примере временные объекты будут создаваться и уничтожаться отнимая время. Просто так "от захотелось" следует избегать такого явления используя ссылки или указатели.
0
|
|||||||
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
| 28.01.2012, 22:52 [ТС] | ||||||
|
AzaKendler, стояяяяятЬ! Вы путаете с operator+=
![]()
0
|
||||||
|
|
||||||
| 28.01.2012, 23:05 | ||||||
ЗЫ: Я искренне надеюсь что сий пример помог чем либо.
0
|
||||||
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
|
| 28.01.2012, 23:07 [ТС] | |
|
AzaKendler, сори, если туплю, но чем это относится к вот этому - (опять мой вопрос...-> Если не юзать кучу => ссылка, которую мы вернем, будет псевдонимом хрен знает чего, ведь объект удалится) ??
0
|
|
|
|
|
| 28.01.2012, 23:12 | |
|
Pavel.fromBy, это относится к вопросам про создание временных объектов твоего класса которого можно избежать.но ты почему то на нем настаиваешь. Ведь твои классы могут быть просто огромными. ну а уж копирование int думаю пережить можно.
0
|
|
|
|
||
| 28.01.2012, 23:14 | ||
|
Другими словами, компилятор создаёт объект с временем жизни "вся программа" и возвращает на него адрес. При этом более честно было бы у функции Test поменять тип с "char*" на "const char*"
1
|
||
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
|||||||||||
| 28.01.2012, 23:17 [ТС] | |||||||||||
|
AzaKendler, я же создавал примитивные примеры, чтобы узнать, про вопрос в первом посте
Вот, откуда ноги растут (опять же, про свой вопрос):
0
|
|||||||||||
|
|
||
| 28.01.2012, 23:18 | ||
|
Другими словами, конструкция типа return "abc" является абсолютно законной и никаких кривых указателей не рожает
Добавлено через 1 минуту
1
|
||
| 28.01.2012, 23:18 | |
|
Помогаю со студенческими работами здесь
20
Статическая память,Динамическая память.
Динамическая память Динамическая память с++ Динамическая память [new] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|