Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 18.11.2013
Сообщений: 16
1

Блок try catch жрет память

18.11.2013, 12:45. Показов 4769. Ответов 48
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Проблема случилась там, где ее никак не ожидал, ответа ни в поисковиках, ни на форумах не нашел. Вся надежда на вас!

в общем есть блок
C++
1
2
3
4
5
try{
  //код, соединения с сервером или отправки сообщения серверу
} catch(Exception *e){
  //обработка ошибки подключения или отправки
}
Так вот при каждом исключении увеличивается память (в диспетчере задач).
Среда : C++ Builder 6

Без блока try catch память не растет, но приложение при ошибке перестает работать, естественно.
Читал о том, что в c++ у блока catch отсутствует деструктор. Еще читал про то, что если поставить ключ компиляции /EHa, то catch не будет кушать память..
Помогите, пожалуйста, весь интернет перерыл, не могу найти ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2013, 12:45
Ответы с готовыми решениями:

Считывание vector<string> - жрёт память
Делаю считывание vector&lt;string&gt; из файла. При первом запуске (программа записана в автозапуск и...

Конструкция try catch в цикле while. Зацикливается блок catch
Здравствуйте. Столкнулся с проблемой: при попытке запихнуть в цикл конструкцию try catch -...

Отрисовка в таймере жрет память
Программа написанная на OpenGL понемногу, но непрерывно ест RAM. А именно после того как я юзаю...

Браузер Awesomium жрет память
Всем здравствуйте, у меня в программе используется компонент awesomium замечено что на некоторых...

48
Заблокирован
Автор FAQ
21.03.2015, 11:00 41
Author24 — интернет-сервис помощи студентам
Если ты ещё не понял, оба ТС используют библиотеку Indy. Get - метод класса этой библиотеки. Хочешь полного кода - качай исходники Indy. Только учти что она писана на Delphi.
- я не использую сторонних библиотек в разработках(политика фирмы), если что то надо пишу сам, с нуля(абсолютно всё и проприетарные вещи тоже). На вопрос - зачем тратить время на разработку аналогов уже готовых либ отвечу - вот как раз по тем причинам, что "течёт невесть откуда" не используем сторонний софт и либы в своих разработках.
Зачем ты сюда приплел MFC и начал баламутить тему подходами от MS я могу только догадываться. ТСы пользуются C++ Builder'ом (RAD Studio), никакой связи с MFC тут и в помине нет.
- билдер содержит windows.h да и вообще VCL и MFC имеют общие корни.
Если ты вдруг не знал этого то процитирую ВиКи
C++Builder первоначально создавалась только для платформы Microsoft Windows.
У топикстартера в коде явное вин исключение поэтому я подожду его.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.03.2015, 16:41 42
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
я не использую сторонних библиотек
Рад за тебя. Но ТС использует, и ответ ему нужен по совершенно конкретной проблеме, которая, судя по всему, связана с совершенно конкретной библиотекой. Ты о ней не знаешь, я о ней тоже не особо в курсе. Однако твой подход таков, что если у тебя в руке молоток (MFC) - всё можно считать гвоздями (исключения передаются по указателю). Но не надо навязывать молоток людям, которые пилят дрова. Потому что дрова - это не гвозди.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
билдер содержит windows.h
Любой компилятор под винду будет содержать подобный файл. Но из этого вовсе не следует, что исключения будут использоваться в MFC-манере с передачей по указателю.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
У топикстартера в коде явное вин исключение поэтому я подожду его.
Это с высокой долей вероятности не соответствует действительности. Объясняю почему:

1. GibbonCho (первый ТС) написал перехват по указателю (ты как раз за этот момент зацепился, и приплел сюда MFC), но это ещё не значит, что ТС вообще понимал что пишет.
2. Почему-то ты не учел, что класс называется не CException как принято в MFC, а Exception (базовый класс исключений в VCL).
3. ТС явно указал какую среду он использует
Цитата Сообщение от GibbonCho Посмотреть сообщение
Среда : C++ Builder 6
Заметь, это не Visual Studio.
4. ТС даже начал сомневаться в исходной постановке задачи:
Цитата Сообщение от GibbonCho Посмотреть сообщение
и не смотря на то, что исключения он ловил, память не росла. Каюсь, неправильно поставил диагноз..
5. У второго "ТС" (Dreablin) никаких указателей нет и в помине (см. код в сообщении #24). Явная передача по ссылке.

После этого ты всё ещё будешь утверждать:
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в коде явное вин исключение
?
Или любое исключение, которое возникает в программе под виндой ты называешь "вин исключением"?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
поэтому я подожду его.
Удачи.
Последняя активность: 12.03.2014 14:28
5
Заблокирован
Автор FAQ
21.03.2015, 17:27 43
Ещё раз для особо непонятливых речь тут идёт о Билдере
Цитата Сообщение от GibbonCho Посмотреть сообщение
Среда : C++ Builder 6
который содержит windows.h, код в посте 1 указывает на механизм эксепшинов WIN(которых ты не знаешь) код Dreablin не соджержит класса эксепшна потому как по всей видимости человек наивно предполагал что catch(...) излечит от всего.

Касательно проблемы - достаточно сделать вот это
C++
1
2
3
4
5
6
try{
   Get()
}
catch(CMemoryException * e){
   e->Delete();
}
и с вероятностью 99,9 % утечка уйдёт. Так до тебя дошло?
Касательно MFC, с ним написана добрая часть ОС окна, что тебе не нравится?Да я определённое время создавал GUI на нём и знаю MFC довольно неплохо и что из этого?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.03.2015, 18:01 44
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
который содержит windows.h
Я уже объяснил выше, что это ничего не значит с точки зрения подхода к использованию исключений.
Если бы он содержал например afx.h можно было бы что-то утверждать про твои CException.
Может ты сможешь мне показать хотя бы один проект, где используется CException (из MFC) внутри C++Builder проекта? Это могло бы послужить хорошим основанием в поддержку твоей версии.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
код Dreablin не соджержит класса эксепшна
Сообщение #24. Ты его не смотрел? О каком вообще диалоге может идти речь, если ты тупо не читаешь того, что тебе пишут?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Касательно MFC, с ним написана добрая часть ОС окна, что тебе не нравится?
Про "молоток-гвозди" ты похоже совсем ничего не понял. Не надо видеть MFC там, где его нет.
0
49 / 37 / 14
Регистрация: 05.02.2010
Сообщений: 249
23.03.2015, 17:16 45
Срач я ваш почитал, но это не дало результат.
Сейчас актуальный вопрос - как сделать, что бы не было исключения при отсутствии ответа по истечении времени ожидания. Диспетчер задач (монитор ресурсов, если точнее) показывает кучу открытых соединений.
Либо где-то в Indy есть такая настройка
Либо использовать не Indy.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.03.2015, 17:39 46
Dreablin, рекомендую тебе создать новую тему в более подходящем разделе: https://www.cyberforum.ru/cpp-builder/
Но, смотрю, ты уже создал.
0
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
23.03.2015, 23:40 47
Я обращаюсь к администрации форума разблокируйте пожалуйста разблокируйте -=ЮрА=-, он иногда и горячиться, но всегда по делу и всегда приводить полезный, работоспособный код. Вот отличие от некоторых модераторов которые умеют править только чужие комментарии, а программировании слабы. Вот и сейчас мое сообщение отредактирует или даже удалит какой-нибудь новоиспеченный модератор слабо разбирающийся в программировании. На сколько я видел, но не использует ненормативную лексику явно, хотя я и встречал на форуме, кто в открытую материться и им это сходит с рук. Почему такая не справедливость??????
1
DrOffset
24.03.2015, 01:00
  #48

Не по теме:

isaak, о таких вещах надо в личку модераторам писать.

0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.03.2015, 09:48 49
Цитата Сообщение от isaak Посмотреть сообщение
Почему такая не справедливость??????
Жизнь - боль.

Цитата Сообщение от isaak Посмотреть сообщение
Вот отличие от некоторых модераторов которые умеют править только чужие комментарии, а программировании слабы.
Гон. Не все модеры конечно гуру, но проверку на знание предметной области они проходят.

Цитата Сообщение от isaak Посмотреть сообщение
но всегда по делу и всегда приводить полезный, работоспособный код.
Многим тут кажется, что его претензии к людям не всегда по делу. Как правило - срач начинается совместно с его приходом в тему. При том, ему кажется что все вокруг ополчились и хотят его задеть. Что на самом деле не так. Он обладает знаниями языка и некоторых библиотек (в основном по части WinAPI) и иногда его советы несут пользу. Просто критика, даже малейшая, вызывает у него дикую ненависть к комментатору. И по части
Цитата Сообщение от isaak Посмотреть сообщение
но не использует ненормативную лексику явно
ещё как использует. Просто модеры успевают подтирать.
6
24.03.2015, 09:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2015, 09:48
Помогаю со студенческими работами здесь

Что то жрет оперативную память
помогити, все перебровал, антивирусы все задействовал и углубленно сканировал, чистил cleaner, в...

Что то жрет оперативную память
мне посоветовали обратиться сюда насчет этой...

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

Самовсплывающая реклама в браузере и жрет память
Добрый день, дал девушке компьютер, она скачала игру Симс с непонятного сайта, после установки игры...


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru