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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
myltdne
2 / 2 / 1
Регистрация: 23.04.2011
Сообщений: 39
19.12.2011, 16:36     Как правильно освободить память #1
Здрасте!
(Тема: Шаблоны функций.)
Не могу правильно написать метод для освобождения памяти.
В мейне делаю все необходимые мне операции с массивами и их данными а потом мне надо освободить память.

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

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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2011, 16:36     Как правильно освободить память
Посмотрите здесь:

как освободить память C++
C++ Как освободить память быстро?
C++ как освободить память?
C++ Освободить память и записать по новой
Как освободить память в двумерном массиве в столбцах C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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));
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
DU
1477 / 1053 / 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;
}
myltdne
2 / 2 / 1
Регистрация: 23.04.2011
Сообщений: 39
19.12.2011, 23:11  [ТС]     Как правильно освободить память #5
спасибо) получилось) все в нуль ушло)
 Комментарий модератора 

Запрещено создавать темы в виде ссылок на задания или коды программ, расположенные на других сайтах.
Yandex
Объявления
19.12.2011, 23:11     Как правильно освободить память
Ответ Создать тему
Опции темы

Текущее время: 19:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru