Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 336
#1

Освобождение памяти, выделенной под массив - C++

07.08.2012, 20:36. Просмотров 2596. Ответов 7
Метки нет (Все метки)

Выделяю память под массив:

C++
1
int (*array_1)[5] = new int[5][5];
как освободить то, что выделил?

И еще вопрос: как указателю **ptr_1 присвоить адрес указателя array_1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2012, 20:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Освобождение памяти, выделенной под массив (C++):

Косвенное обращение к методам. Освобождение памяти,выделенной под двумерный динамический массив - C++
Вопрос 1. В задании необходимо проиллюстрировать косвенный способ обращения к методам. Искал в интернете. Нашел : Array *s, obj(n,...

Массив: Освобождение выделенной памяти - C++
Сказали переделать код, нужно что бы память освобождалась не в отдельной функции а как то по другому так и не понял как. #include...

Освобождение памяти, выделенной на динамический массив структур - C++
Есть динамический массив структур. Как я понимаю, delete A не производит полной очистки памяти в данном случае, потому нужно использовать...

Освобождение памяти, выделенной через new - C++
Я прочитал, что память динамически для строки, можно выделить к примеру узнать длину строки strlen(tex) и нужно добавить единицу для...

Корректно ли освобождение выделенной памяти? - C++
Извиняюсь, если такой вопрос уже звучал. Допустим есть такой кусок кода: struct A { int *x; } *b; void main() { b = new A;...

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

7
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
07.08.2012, 20:47 #2
delete[] *array_1;
?
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 336
07.08.2012, 21:15  [ТС] #3
освободив память, заново отобразил содержимое массива.

Первые два значения вышли адресами, а остальные не изменились. так память освободилась или нет?
0
alex_x_x
бжни
2451 / 1656 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.08.2012, 21:18 #4
Цитата Сообщение от no_wearines Посмотреть сообщение
Первые два значения вышли адресами, а остальные не изменились. так память освободилась или нет?
память освободилось в том смысле, что менеджер heap'а (кучи, динамической памяти) теперь может при следующем new выдать этот кусок памяти кому-нибудь другому
не обязательно, что эта память будет отдана ОС или сразу же кем-нибудь переиспользована
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 336
07.08.2012, 21:28  [ТС] #5
Если не затруднит, объясните более подробно, а то я темню
0
Jupiter
Каратель
Эксперт С++
6566 / 3987 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2012, 21:35 #6
Цитата Сообщение от no_wearines Посмотреть сообщение
Выделяю память под массив:
C++
1
int (*array_1)[5] = new int[5][5];
как освободить то, что выделил?
C++
1
delete [] array_1;
1
Borkot
4 / 4 / 0
Регистрация: 05.05.2012
Сообщений: 186
Записей в блоге: 1
11.08.2012, 14:42 #7
Я спрашивал тут на форуме,Мне сказали,что память освобождается:delete [] .... если была new ...[],free() если была realloc/calloc.Спросив то же самое у преподователя по С++.Он сказал,что при вызове free()-подразумевается delete[].Что вроде как макрос.То есть без разницы использовать free() || delete[].Вот я и стаю на перепутье.Как же правильнее?
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,451
11.08.2012, 15:15 #8
Цитата Сообщение от Borkot Посмотреть сообщение
.Спросив то же самое у преподователя по С++.Он сказал,что при вызове free()-подразумевается delete[].
Выгнать преподавателя
Да чаще всего delete реализовано через free, но никто не обещал что так и будет
delete вызывает деструкторы
free нет

Добавлено через 26 минут
покажи своему преподу вот этот код
разница между new/delete и malloc/free

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
class MyClass
{
public:
    MyClass(){std::cout<<"Constructor"<<this<<std::endl;}
    ~MyClass(){std::cout<<"Destructor"<<this<<std::endl;}
};
int main()
{
    std::cout<<"new"<<std::endl;
    MyClass* cl1=( MyClass*)new MyClass[5];
    std::cout<<"malloc"<<std::endl;
    MyClass* cl2=(MyClass*)malloc(5*sizeof(MyClass));
    std::cout<<"free"<<std::endl;
    free(cl2);
    std::cout<<"delete"<<std::endl;
    delete[]cl1;
    system("PAUSE");
    return 0;
}
1
11.08.2012, 15:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2012, 15:15
Привет! Вот еще темы с ответами:

Ошибка при высвобождении ранее выделенной памяти под динам. массив - C++
Собственно, в чем суть: //инициализирую bool* delimeters = new bool; ... //Удаляю delete delimeters; Точки останова...

Объясните правила работы с delete с указателями и массивами (корректное освобождение выделенной памяти) - C++
Указатель содержал ссылку на динамический массив. Массив удалил. Имеет ли смысл применять delete на указатель?

Корректное освобождение памяти из-под списка - C++
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;vld.h&gt; struct A { int key; }; struct List

Освобождение динамической памяти из-под прямоугольной матрицы - C++
Добрый вечер! При попытке очищения памяти после завершения работы программы с прямоугольной матрицей m на n мне выдаёт ошибку а-ля...


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

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

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