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

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

Войти
Регистрация
Восстановить пароль
 
_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
#1

Очистка памяти delete[]; - C++

06.06.2013, 01:04. Просмотров 822. Ответов 7
Метки нет (Все метки)

Есть функция ввида:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void loltest(int md3)
{
    char* randChars;
    int cCount;
    if(md3 <= 0)
        cCount = 13;
    else
        cCount = 26; 
    randChars = new char[cCount];
    .....
    if(md3 <= 0)
        randChars = "adsadasd";
    else
        randChars = "12344889";
 
{много когда}
 
    delete[] randChars;
}
вызывается она каждую секунду в цикле for и в конце концов программа вылетает.
А если убрать 'delete[] randChars;' то вылета не будет, но выделяется много памяти.

как быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 01:04     Очистка памяти delete[];
Посмотрите здесь:

Освобождение памяти delete - C++
Если у меня есть указатель (pt) N-ой степени, я присвоил ему указатель на начало массива (N - 1)ой степени (через new), затем некоторому...

Утечка памяти и delete - C++
Вот накопились вопросы про утечки памяти. 1) Как проявляется утечка памяти? На многих сайтах написано что если не удалять указатели то...

delete[] статической памяти - C++
1. Должна ли возникать ошибка (или падение программы) при применении delete к статической памяти? У меня (Microsoft Visual Studio 2005)...

Delete[] и утечка памяти - C++
Как можно избежать вытока памяти? И вообще почкму криво работает? #include&lt;iostream&gt; #include&lt;windows.h&gt; #include&lt;ctime&gt; using...

Удаление памяти посредством delete[] - C++
Добрый день! Столкнулся с проблемой: при удалении выделенной памяти, программа зависает, будто не способна выполнить данный оператор....

Сколько памяти освобождает delete - C++
История такая, перегрузил операторы new и delete. Теперь хочу отслеживать сколько память выделено и сколько освобождено. С выделением,...

new и delete при освобождении памяти - C++
Здравствуйте. Скажите, пожалуйста что я неправильно делаю. При освобождении памяти. Выделяем память: char **VIRTUAL = NULL; if...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6997 / 4168 / 594
Регистрация: 29.11.2010
Сообщений: 11,049
06.06.2013, 01:09     Очистка памяти delete[]; #2
C++
1
strcpy(randChars, "adsadasd");
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
06.06.2013, 01:10     Очистка памяти delete[]; #3
Цитата Сообщение от _or_75 Посмотреть сообщение
А если убрать 'delete[] randChars;' то вылета не будет
C++
1
2
3
4
5
randChars = new char[cCount];//Выделили память
//...
randChars = "adsadasd";//а теперь изменили указатель и он указывает на константный строковый литерал. Старый указатель утерян, память утекла в небытие
//...
delete[] randChars;//Пытаемся освободить память, по указателю. Указатель указывает уже на константный строковый литерал. Получаем UB
вот:
Литература C++
MrGluck
06.06.2013, 01:12
  #4

Не по теме:

Я знал, что кто-нибудь напишет подробно. Самому было лень

_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
06.06.2013, 07:50  [ТС]     Очистка памяти delete[]; #5
а вот еще вопрос, как сделать цикл перебирая все значения от a до Z и от 0 до 9 ?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
06.06.2013, 07:51     Очистка памяти delete[]; #6
начальное 'a', конечное 'Z'
аналогично с цифрами - от '0' до '9' включительно
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.06.2013, 10:37     Очистка памяти delete[]; #7
Croessmah, имхо лучше самому сформировать массив из нужных символов, дабы не полагаться на кодовую таблицу. Или кто-то даст гарантию последовательного и непрерывного расположения кодов символов?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 10:42     Очистка памяти delete[];
Еще ссылки по теме:

Проверка освобождения памяти (new, delete) - C++
Всем привет. Программы помаленьку становятся сложнее. Появляются самодельные контейнеры внутри других самодельных контейнеров внутри...

почему не delete (выделение памяти) - C++
почему в примерах в мсдне не высвобождается память после использования asctime, ctime? #include &lt;time.h&gt; #include &lt;stdio.h&gt; int...

Ошибка освобождения памяти new/delete - C++
При выполнении оператора deleterez вылетает ошибка BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse) #include &lt;iostream&gt; using namespace std;...

Очистка памяти - C++
Как правильно очистить память в массиве классов Вот код конструктора, выделяющего память, и деструктора. Выдает ошибку в самом конце...

Очистка памяти - C++
Вот сделал лабу и все работает отлично, но осталось последнее new выделяет память мне нужно добавить функцию которая будет вызыватся в...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
06.06.2013, 10:42     Очистка памяти delete[]; #8
Цитата Сообщение от Tulosba Посмотреть сообщение
имхо лучше самому сформировать массив из нужных символов
угу, только студенты же
Yandex
Объявления
06.06.2013, 10:42     Очистка памяти delete[];
Ответ Создать тему
Опции темы

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