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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
GibbonCho
0 / 0 / 0
Регистрация: 18.11.2013
Сообщений: 16
18.11.2013, 12:45     Блок try catch жрет память #1
Доброго времени суток! Проблема случилась там, где ее никак не ожидал, ответа ни в поисковиках, ни на форумах не нашел. Вся надежда на вас!

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

Без блока try catch память не растет, но приложение при ошибке перестает работать, естественно.
Читал о том, что в c++ у блока catch отсутствует деструктор. Еще читал про то, что если поставить ключ компиляции /EHa, то catch не будет кушать память..
Помогите, пожалуйста, весь интернет перерыл, не могу найти ответ.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
21.03.2015, 11:00     Блок try catch жрет память #41
Если ты ещё не понял, оба ТС используют библиотеку Indy. Get - метод класса этой библиотеки. Хочешь полного кода - качай исходники Indy. Только учти что она писана на Delphi.
- я не использую сторонних библиотек в разработках(политика фирмы), если что то надо пишу сам, с нуля(абсолютно всё и проприетарные вещи тоже). На вопрос - зачем тратить время на разработку аналогов уже готовых либ отвечу - вот как раз по тем причинам, что "течёт невесть откуда" не используем сторонний софт и либы в своих разработках.
Зачем ты сюда приплел MFC и начал баламутить тему подходами от MS я могу только догадываться. ТСы пользуются C++ Builder'ом (RAD Studio), никакой связи с MFC тут и в помине нет.
- билдер содержит windows.h да и вообще VCL и MFC имеют общие корни.
Если ты вдруг не знал этого то процитирую ВиКи
C++Builder первоначально создавалась только для платформы Microsoft Windows.
У топикстартера в коде явное вин исключение поэтому я подожду его.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.03.2015, 16:41     Блок try catch жрет память #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
-=ЮрА=-
Заблокирован
Автор FAQ
21.03.2015, 17:27     Блок try catch жрет память #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 довольно неплохо и что из этого?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.03.2015, 18:01     Блок try catch жрет память #44
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
который содержит windows.h
Я уже объяснил выше, что это ничего не значит с точки зрения подхода к использованию исключений.
Если бы он содержал например afx.h можно было бы что-то утверждать про твои CException.
Может ты сможешь мне показать хотя бы один проект, где используется CException (из MFC) внутри C++Builder проекта? Это могло бы послужить хорошим основанием в поддержку твоей версии.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
код Dreablin не соджержит класса эксепшна
Сообщение #24. Ты его не смотрел? О каком вообще диалоге может идти речь, если ты тупо не читаешь того, что тебе пишут?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Касательно MFC, с ним написана добрая часть ОС окна, что тебе не нравится?
Про "молоток-гвозди" ты похоже совсем ничего не понял. Не надо видеть MFC там, где его нет.
Dreablin
5 / 5 / 1
Регистрация: 05.02.2010
Сообщений: 124
23.03.2015, 17:16     Блок try catch жрет память #45
Срач я ваш почитал, но это не дало результат.
Сейчас актуальный вопрос - как сделать, что бы не было исключения при отсутствии ответа по истечении времени ожидания. Диспетчер задач (монитор ресурсов, если точнее) показывает кучу открытых соединений.
Либо где-то в Indy есть такая настройка
Либо использовать не Indy.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.03.2015, 17:39     Блок try catch жрет память #46
Dreablin, рекомендую тебе создать новую тему в более подходящем разделе: http://www.cyberforum.ru/cpp-builder/
Но, смотрю, ты уже создал.
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
23.03.2015, 23:40     Блок try catch жрет память #47
Я обращаюсь к администрации форума разблокируйте пожалуйста разблокируйте -=ЮрА=-, он иногда и горячиться, но всегда по делу и всегда приводить полезный, работоспособный код. Вот отличие от некоторых модераторов которые умеют править только чужие комментарии, а программировании слабы. Вот и сейчас мое сообщение отредактирует или даже удалит какой-нибудь новоиспеченный модератор слабо разбирающийся в программировании. На сколько я видел, но не использует ненормативную лексику явно, хотя я и встречал на форуме, кто в открытую материться и им это сходит с рук. Почему такая не справедливость??????
DrOffset
24.03.2015, 01:00
  #48

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2015, 09:48     Блок try catch жрет память
Еще ссылки по теме:

Работает ли указатель на базовый класс исключения, когда попадает в блок catch C++
Try-catch C++
C++ Один блок catch для двух типов исключений порожденных от одного класса

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
24.03.2015, 09:48     Блок try catch жрет память #49
Цитата Сообщение от isaak Посмотреть сообщение
Почему такая не справедливость??????
Жизнь - боль.

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

Цитата Сообщение от isaak Посмотреть сообщение
но всегда по делу и всегда приводить полезный, работоспособный код.
Многим тут кажется, что его претензии к людям не всегда по делу. Как правило - срач начинается совместно с его приходом в тему. При том, ему кажется что все вокруг ополчились и хотят его задеть. Что на самом деле не так. Он обладает знаниями языка и некоторых библиотек (в основном по части WinAPI) и иногда его советы несут пользу. Просто критика, даже малейшая, вызывает у него дикую ненависть к комментатору. И по части
Цитата Сообщение от isaak Посмотреть сообщение
но не использует ненормативную лексику явно
ещё как использует. Просто модеры успевают подтирать.
Yandex
Объявления
24.03.2015, 09:48     Блок try catch жрет память
Ответ Создать тему
Опции темы

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