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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
myltdne
2 / 2 / 1
Регистрация: 23.04.2011
Сообщений: 39
#1

Как правильно освободить память - C++

19.12.2011, 16:36. Просмотров 5167. Ответов 4
Метки нет (Все метки)

Здрасте!
(Тема: Шаблоны функций.)
Не могу правильно написать метод для освобождения памяти.
В мейне делаю все необходимые мне операции с массивами и их данными а потом мне надо освободить память.

вот то что у меня есть, вызываю вконце всех операций
(но ссылки не обнуляются :-( помогите правильно освободить память пожалуйста)

C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
void CleanAllArrays(T* arr1, T* arr2, T* arr3, T* arr4)
{
    delete [] arr1;
    arr1 = nullptr;
    delete [] arr2;
    arr2 = nullptr;
    delete [] arr3;
    arr3 = nullptr;
    delete [] arr4;
    arr4 = nullptr;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2011, 16:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно освободить память (C++):

Как правильно освободить память - C++
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как правильно освободить память - C++
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo = *(localtime(&amp;seconds)); return...

Как правильно освободить память - C++
Есть функция char* md5(const char*). Как освободить память выделенную ею? #include &lt;openssl\md5.h&gt; char* md5(const char* text) { ...

Как правильно освободить память деструктором? - C++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...

Подскажите пожалуйста, как правильно освободить память - C++
Всем ку! Подскажите пожалуйста, как правильно удалить(освободить память) массива array2D. Array1D&lt;Elem&gt;* array2D = ...

Как правильно освободить память после работы с динамическим массивом - C++
Здравствуйте! Помогите понять в чём проблема при освобождении памяти. Простой пример: #define _CRT_SECURE_NO_WARNINGS #include...

4
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
19.12.2011, 16:52 #2
C++
1
2
delete [] p_var;       // память освобождается
p_var = NULL;          // указатель заменяется на 0 (нуль-указатель)
эт если совсем массивы сносим, а если вы просто хотите значения обнулить используйте
C++
1
ZeroMemory (&objA,sizeof (objA));
0
myltdne
2 / 2 / 1
Регистрация: 23.04.2011
Сообщений: 39
19.12.2011, 22:57  [ТС] #3
мне нужно не обнулить значения в массивах, а освободить память - "выкинуть мусор"

Цитата Сообщение от ExcellencE Посмотреть сообщение
C++
1
2
delete [] p_var;    // память освобождается
p_var = NULL;    // указатель заменяется на 0 (нуль-указатель)
я так и делаю, но вот что в оке просмотра я вижу

скрин

а мне нужно освободить память. что значат все эти цифры емае, я же удаляю и ставлю ссылку nullptr
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.12.2011, 23:00 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
код один а на скрине совсем другое. + в ф-ии CleanAllArrays нуллптр вы присваиваете локальной переменной. на вызывающей стороне от этого значения указателей не поменяются. для этого нужно ссылку на указатель передавать.
может вам это надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
void CleanAllArrays(T*& arr1, T*& arr2, T*& arr3, T*& arr4)
{
        delete [] arr1;
        arr1 = nullptr;
        delete [] arr2;
        arr2 = nullptr;
        delete [] arr3;
        arr3 = nullptr;
        delete [] arr4;
        arr4 = nullptr;
}
1
myltdne
2 / 2 / 1
Регистрация: 23.04.2011
Сообщений: 39
19.12.2011, 23:11  [ТС] #5
спасибо) получилось) все в нуль ушло)
 Комментарий модератора 

Запрещено создавать темы в виде ссылок на задания или коды программ, расположенные на других сайтах.
0
19.12.2011, 23:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2011, 23:11
Привет! Вот еще темы с ответами:

Как освободить память? - C++
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

как освободить память? - C++
Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором new под двумерный массив типа char,- как только идет...

Как освободить память быстро? - C++
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает #include&lt;iostream&gt; ...

Как освободить память из-под вектора объектов? - C++
vector&lt;TObj*&gt; obj; obj.push_back(new obj()); obj.erase(obj.begin()+indx);//удаляю указатель который указывал на объект &quot;Для...


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

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

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