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

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

Восстановить пароль Регистрация
 
_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
06.06.2013, 01:04     Очистка памяти delete[]; #1
Есть функция ввида:

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[];
Посмотрите здесь:

C++ утечка памяти и delete
new и delete при освобождении памяти C++
C++ освобождение памяти delete
C++ delete[] статической памяти
Удаление памяти посредством delete[] C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,427
06.06.2013, 01:09     Очистка памяти delete[]; #2
C++
1
strcpy(randChars, "adsadasd");
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
06.06.2013, 07:51     Очистка памяти delete[]; #6
начальное 'a', конечное 'Z'
аналогично с цифрами - от '0' до '9' включительно
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.06.2013, 10:37     Очистка памяти delete[]; #7
Croessmah, имхо лучше самому сформировать массив из нужных символов, дабы не полагаться на кодовую таблицу. Или кто-то даст гарантию последовательного и непрерывного расположения кодов символов?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 10:42     Очистка памяти delete[];
Еще ссылки по теме:

delete[] *pointer vs. delete pointer и утечка памяти C++
C++ Ошибка освобождения памяти new/delete
Сколько памяти освобождает delete C++

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

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

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