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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bredorub
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 94
#1

Освобождается ли память? - C++

23.01.2011, 14:01. Просмотров 962. Ответов 5
Метки нет (Все метки)

Под вводимое с клавиатуры количество переменных выделяется память. Затем переменным в цикле присваивается значение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int units, *x;
randomize();
cin >> units;
x = new int [units];
for (int i = 0; i < units; i++) {
           x[i] = random(20);
    cout << x[i] << " " << &x[i] << endl;
}
cout << endl;
delete[] x;
for (int i = 0; i < units; i++) {
    cout << x[i] << " " << &x[i] << endl;
}
Проблема в том, что цикл for после освобождения памяти выдает абсолютно то же самое что и for до delete. Стало быть, память не освобождается? Хотя синтаксис вроде верный... В общем либо я что-то не так делаю, либо чего-то недопонимаю, либо одно из двух. Буду признателен если кто подскажет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2011, 14:01     Освобождается ли память?
Посмотрите здесь:

Не освобождается память - C++
Мне надо сделать прогу,точнее переделать, с использованием динамического двумерного массива... Я не буду писать эту прогу в изночальном...

Память освобождается не полностью - C++
Суть такова. При многократном выделении/освобождении растет (судя по диспетчеру задач Шindows) используемая программой память. Например,...

Почему память массива не освобождается? - C++
В выводе *b должна быть ересь, но на самом деле коректно выводит цифру &quot;3&quot;. #include &lt;iostream&gt; using namespace std; void func(int...

Память освобождается, но значение остается - C++
Почему в следующем коде, программа завершается принудительно, но в консоли все равно видно значение переменной, память которой была...

Правильно ли в данной программе освобождается память? - C++
Доброго времени суток, написал учебную программу из книги Праты. В принципе задание не требует всего этого, но решил понабить руку и...

Не освобождается память при выбросе исключений - C++
это у меня находится в классе Add. Туда я добавляю элементы, перед этим проверяю, нет ли такого уже: try { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
23.01.2011, 14:04     Освобождается ли память? #2
обращаться к освобожденной памяти небезопасно, но да, менеджер памяти скорее всего не будет отдавать память обратно ос сразу после ее освобождения, из соображений эффективности
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
23.01.2011, 14:09     Освобождается ли память? #3
Память освобождается, содержимое памяти не изменяется и указатель продолжает указывать на выделенный ранее кусок памяти..
Если создать второй динамический массив того же размера, он с высокой долей вероятности попадет на тот же участок памяти и будет содержать значения старого массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main() {
  int units, *x;
  cin >> units;
  x = new int [units];
  for (int i = 0; i < units; i++) {
           x[i] = rand() % 20;
        cout << x[i] << " " << &x[i] << endl;
  }
  cout << endl;
  delete[] x;
 
  int *y = new int[units];
  for (int i = 0; i < units; i++) {
        cout << y[i] << " " << &y[i] << endl;
  }
}
Bredorub
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 94
23.01.2011, 14:25  [ТС]     Освобождается ли память? #4
Память освобождается, содержимое памяти не изменяется и указатель продолжает указывать на выделенный ранее кусок памяти..
А как тогда удостовериться в том, что память действительно освобождается?
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
23.01.2011, 14:36     Освобождается ли память? #5
Память освобождается для дальнейшего использования после вызова delete. Эту память можно использовать сразу после освобождения. Если память не освобождается после delete, это косяк ОС.

Что же вы такое хитрое имеете в виду под "освобождением" памяти, что вам нужно в этом удостоверяться?
Попробую угадать. Если в коде программы вам нужно проверить, освободилась ли ранее выделенная память, присваивайте указателю при инициализации и сразу после удаления значение NULL. Тогда вы всегда сможете проверить, выделена ли память под указатель.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2011, 21:34     Освобождается ли память?
Еще ссылки по теме:

Не освобождается память в списке указателей на класс - C++
#include &lt;iostream&gt; #include &lt;list&gt; using namespace std; class myClass{ private: int x; bool life; public: ...

Память - C++
Здравствуйте, пишу программу, суть такова: Нужно строки из файла отсортировать по длине строки, а строки равной длины отсортировать по...

Статическая память - C++
Если я на этапе компиляции выделил слишком много памяти. Например зарезервировал память под огромный массив.Но в системе нет столько памяти...

динамическая память.... - C++
Ввести двухмерном массив, для работы с массивом использовать указатель. Массив разместить в динамической памяти. Определение суммы...

Указатели и память - C++
Народ как указателю присвоить определённый адрес? P.S. Цитирую задание &quot;Пользуясь указателями выдать на печать адреса этих символов и...

Не выделяется память - C++
#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; using namespace std; class DynArray { public: int size, end; int...


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.01.2011, 21:34     Освобождается ли память? #6
Термин "освобождение памяти" не означает, что память должна полностью очиститься или там отправиться по почте обратно на завод. Это просто значит, что в дальнейшем эта память может использоваться под другие нужды, чем раньше (т.е. мы просто говорим, что данные, которые в памяти находились, уже не актуальны, и что мол давай, ось, распоряжайся ею, как хочешь).
Yandex
Объявления
23.01.2011, 21:34     Освобождается ли память?
Ответ Создать тему
Опции темы

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