22.05.2019, 18:57 [+3 UTC]
в нашей команде: 3 633 чел. | участники онлайн: 3 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.75 (18.05.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.05.2019, 21:07

Последний вопрос:
22.05.2019, 16:35
Всего: 149679

Последний ответ:
22.05.2019, 16:58
Всего: 258509

Последняя рассылка:
22.05.2019, 16:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
02.07.2010, 11:24 »
Dimon4ik
Большое спасибо. Помогло отключение отдельных программ в автозагрузке. Таких как StarDock ObjectDock, DaemonTools, Mail.ru агент и т.д. Выявить какая именно программа вызывала торможение не удается. Так как при включении любой из них вручную проблема подвисания компьютера не появляется. [вопрос № 179354, ответ № 262381]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 617
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 279
solowey
Статус: Практикант
Рейтинг: 267

Перейти к консультации №:
 

Консультация онлайн # 142034
Раздел: • С / С++
Автор вопроса: Warobushek
Отправлена: 23.08.2008, 07:39
Поступило ответов: 1

если для какой то переменной была динамически выделена память либо с помощью new,либо с помощью malloc,либо с помощью realloc и т.п.
то может ли что-то страшное произойти, если попытаться освободить её более одного раза.
т.е. 2 раза free или delete

Состояние: Консультация закрыта

Ответ # 227724 от Андрей Кузнецов aka Dr_Andrew (Старший модератор)

Здравствуйте, Warobushek!
Если вызвать delete с недействительным указателем, то есть с тем, для которого не выделена память (в том числе тогда, когда память была ранее освобождена предыдущим вызовом delete), то в системе распределения памяти происходит сбой, что проявляется крахом приложения.
Подобная ошибка хода выполнения (run-time error) довольно часто встречается в программах на C++, если предыдущее освобождение памяти было скрыто где-то в недрах программы. Например, при использовании библиотеки Qt 3.x код ниже

TFindForm* pFindDialog = new TFindForm(this);
pFindDialog->show();
delete pFindDialog;


будет работать нормально, если в параметрах конструктора диалогового окна флаг WFlags установить как 0. Однако если его установить как Qt::WDestructiveClose (уничтожать диалоговое окно при его закрытии), то при выполнении вышеприведённого участка кода программа рухнет, т.к. оператор delete попытается уничтожить уже несуществующее окно.
Поэтому при использовании new - delete при вызове последнего рекомендуется использовать проверку на наличие объекта:

if(pFindDialog) delete pFindDialog;


Консультировал: Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Дата отправки: 23.08.2008, 09:53

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 142034
1

# 1

= общий = | 23.08.2008, 11:30

Да может. Поэтому после освобождении памяти
указателю на освобоженную область присваиваем NULL,
а при следующем освобождении проверяем этот указатель на NULL.
Как и говорил предыдущий эксперт.
Удачи!

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15144 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.75 от 18.05.2019
Версия JS: 1.33 | Версия CSS: 3.35