13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
1 | ||||||
Стек или динамическая память!?28.01.2012, 20:44. Показов 3950. Ответов 29
Метки нет (Все метки)
Добрый вечер всем! Прошу ответить на вопрос (ниже приведен код): почему строка "Test!" выводится на экран? Она же не была создана в дин. памяти, т.е. должна была "загнуться" после 1ой строки main(). Заранее благодарен...
0
|
28.01.2012, 20:44 | |
Ответы с готовыми решениями:
29
Стек и динамическая память Динамическая память и стек,различие Память. Стек или куча - есть ли преимущества одного кода над другим? Статическая память,Динамическая память. |
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
28.01.2012, 23:20 | 21 | |||||
Evg, Евгений очень хорошо что ты здесь.
очень хотелось бы четкого понимания Хочу уточнить. Можно ли использовать данный указатель как критерий для сравнения, пока идет программа? На форуме товарищи сказали что нет
0
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
||||||
28.01.2012, 23:21 [ТС] | 22 | |||||
Evg, про строки, с трудом, но разобрался (хотя, не понятно почему он делает массив символов статическим). Спасибо. А как быть с этим:
0
|
28.01.2012, 23:23 | 23 | ||||||||||
М... а из того описания непонятно? В общем
Нет, здесь как раз-таки опасная ситуация. Возвращается ссылка на локальный (а не глобальный) объект. Строка (а точнее, строковой литерал) по определению является глобальным объектом
2
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
|
28.01.2012, 23:27 [ТС] | 24 |
Evg, все, со строками покончено Не заметил, что статик до функции. Теперь с интами... Ситуация, может и опасная, но почему работает? Ведь не должно же!!! Объект умирает и ссылка является псевдонимом хрен знает чего... (где-то я уже это писал ).
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
28.01.2012, 23:29 | 25 | |||||
Evg,
0
|
28.01.2012, 23:31 | 26 |
Объект умирает, но память, где этот объект лежал, загадить ещё никто не успел. Но если после вызова твоей func, возвращающей ссылку, ты вызовешь ещё какую-нибудь функцию, то она уже эту память подпортит
Вот тут я кидал ссылку Deep C Там в том числе и про этот случай рассказывается. Кстати, func может возвращать хоть ссылку, хоть указатель - по сути дела это одно и то же
1
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
28.01.2012, 23:33 | 27 |
Pavel.fromBy, после выхода из функции память в стеке не очищается, а просто оказывается выше текущей вершины. Так что, если ничего не успело занять там место и страницу памяти не вернули системе, данные там останутся те же. Но рассчитывать на это не стоит, если случится последнее "если" приложение рухнет с сегфолтом.
0
|
28.01.2012, 23:33 | 28 |
В данной программе имеется два строковых литерала. Поскольку они по стандарту являются const-объектами, то компилятор имеет право эти два объекта положить в одно и то же место памяти. На вопрос "можно или нет" ответ "нельзя". На вопрос "будут ли одинаковыми" ответ "зависит от компилятора"
1
|
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
|
|
28.01.2012, 23:34 [ТС] | 29 |
Evg, премного благодарен! Вопросов нет... За ссылку отдельное спасибо... Хоть и с английским не очень дружу, обязательно посмотрю!
NoMasters, и вам спасибо!
0
|
28.01.2012, 23:36 | 30 |
Тут из разряда "нельзя, но если очень хочется, то можно". Если программа пишется под конкретную версию компилятора, если программист заведомо знает, что компилятор умеет одинаковые строки класть в одну память, если программист знает, что в качестве аргумента сравнения всегда будет указатель, инициализированный именно строковым литералом, то можно. Но при этом программист будет сидеть на бочке с динамитом
0
|
28.01.2012, 23:36 | |
28.01.2012, 23:36 | |
Помогаю со студенческими работами здесь
30
Динамическая структура данных (Стек) Динамическая память Динамическая память с++ Динамическая память [new] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |