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

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

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

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

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

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

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

И еще вопрос: как указателю **ptr_1 присвоить адрес указателя array_1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2012, 20:36     Освобождение памяти, выделенной под массив
Посмотрите здесь:
C++ Косвенное обращение к методам. Освобождение памяти,выделенной под двумерный динамический массив
C++ Массив: Освобождение выделенной памяти
Освобождение памяти, выделенной на динамический массив структур C++
Корректно ли освобождение выделенной памяти? C++
C++ Освобождение памяти, выделенной через new
C++ Освобождение выделенной памяти при закрытии программы
Ошибка при высвобождении ранее выделенной памяти под динам. массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 523
Записей в блоге: 1
07.08.2012, 20:47     Освобождение памяти, выделенной под массив #2
delete[] *array_1;
?
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
07.08.2012, 21:15  [ТС]     Освобождение памяти, выделенной под массив #3
освободив память, заново отобразил содержимое массива.

Первые два значения вышли адресами, а остальные не изменились. так память освободилась или нет?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.08.2012, 21:18     Освобождение памяти, выделенной под массив #4
Цитата Сообщение от no_wearines Посмотреть сообщение
Первые два значения вышли адресами, а остальные не изменились. так память освободилась или нет?
память освободилось в том смысле, что менеджер heap'а (кучи, динамической памяти) теперь может при следующем new выдать этот кусок памяти кому-нибудь другому
не обязательно, что эта память будет отдана ОС или сразу же кем-нибудь переиспользована
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
07.08.2012, 21:28  [ТС]     Освобождение памяти, выделенной под массив #5
Если не затруднит, объясните более подробно, а то я темню
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 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;
Borkot
4 / 4 / 0
Регистрация: 05.05.2012
Сообщений: 183
Записей в блоге: 1
11.08.2012, 14:42     Освобождение памяти, выделенной под массив #7
Я спрашивал тут на форуме,Мне сказали,что память освобождается:delete [] .... если была new ...[],free() если была realloc/calloc.Спросив то же самое у преподователя по С++.Он сказал,что при вызове free()-подразумевается delete[].Что вроде как макрос.То есть без разницы использовать free() || delete[].Вот я и стаю на перепутье.Как же правильнее?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2012, 15:15     Освобождение памяти, выделенной под массив
Еще ссылки по теме:
C++ Объясните правила работы с delete с указателями и массивами (корректное освобождение выделенной памяти)
Корректное освобождение памяти из-под списка C++
Освобождение динамической памяти из-под прямоугольной матрицы C++
C++ Освобождение памяти из под Объектов в статическом массиве указателей
Обнулить кусок памяти (выделенной под указатели) по быстрому C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6543 / 5009 / 462
Регистрация: 14.02.2011
Сообщений: 16,656
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;
}
Yandex
Объявления
11.08.2012, 15:15     Освобождение памяти, выделенной под массив
Ответ Создать тему
Опции темы

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