Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление автоматических переменных 
V
    Опции темы
Hagrael
Дата 19.7.2011, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Почему нельзя удалять автоматические переменные? Вот такой код:
Код

#include <iostream>
int main() {
    int a=5;
    delete &a;
    std::cout << a;
}

выдает 5!
PM MAIL   Вверх
borisbn
Дата 19.7.2011, 09:46 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Hagrael @  19.7.2011,  08:23 Найти цитируемый пост)
выдает 5!

я бы 2 поставил smile
нельзя освобождать память в куче, если эта память выделена на стеке. Память, выделенная под переменные, выделенные на стеке, освобождается при выходе из области видимости (в данном случае - при выходе из ф-ции).
Если хочешь, чтобы память освободилась раньше, ограничивай область видимости
Код

#include <iostream>
int main() {
    { // <---
        int a=5;
        std::cout << a;
    } // <---
    // память, выделенная для int a освобождена
}


P.S. Почему 5, а не 42 ? smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 19.7.2011, 09:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Hagrael, даже бы если у тебя переменная находилась в куче, то освобождение памяти не привело бы к изменению ее значения. Скорей бы программа вылетела с ошибкой. Фактически, освобождение памяти - это пометка в таблице, что кусок памяти свободен. Не более того.
PM   Вверх
Hagrael
Дата 19.7.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



А-а, понятно. Спасибо smile
PM MAIL   Вверх
bsa
Дата 19.7.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Hagrael, раз ответ на вопрос получен, то пометь тему решенной

PM   Вверх
Сыроежка
Дата 19.7.2011, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: 1
Всего: 1



Цитата(Hagrael @  19.7.2011,  08:23 Найти цитируемый пост)
Почему нельзя удалять автоматические переменные? Вот такой код:
Выделить всёкод C++
    
#include <iostream>
int main() {
    int a=5;
    delete &a;
    std::cout << a;
}

выдает 5! 



Потому что автоматические переменные и операторы new/delete имеют дело с разной памятью и с разным механизмом выделения памяти.  Автоматические переменные удаляет сам компилятор, генерирую для этого специальный код, если требуется, например, если автоматическая переменная - это объект класса.
PM MAIL   Вверх
Hagrael
Дата 20.7.2011, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Сыроежка, спасибо за дополнение.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.