21.02.2019, 07:50 [+3 UTC]
в нашей команде: 3 398 чел. | участники онлайн: 1 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

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

Общие новости:
10.02.2019, 21:59

Форум:
16.02.2019, 15:03

Последний вопрос:
20.02.2019, 20:01
Всего: 148787

Последний ответ:
21.02.2019, 01:04
Всего: 257812

Последняя рассылка:
20.02.2019, 21:15

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

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

Наша кнопка:

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

Отзывы о нас:
23.06.2013, 11:56 »
Александр Сергеевич
Спасибо!!! [вопрос № 187476, ответ № 272424]
30.11.2010, 15:21 »
Regina
Спасибо Вам огромное, Вы мне очень помогли!))) [вопрос № 181035, ответ № 264442]

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

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

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

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

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 748
solowey
Статус: Студент
Рейтинг: 334
zdwork
Статус: 1-й класс
Рейтинг: 111

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

Консультация онлайн # 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.13610 сек.

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