GibbonCho
0 / 0 / 0
Регистрация: 18.11.2013
Сообщений: 16
|
||||||
#1 | ||||||
Блок try catch жрет память - C++18.11.2013, 12:45. Просмотров 1955. Ответов 48
Метки нет Все метки)
(
Доброго времени суток! Проблема случилась там, где ее никак не ожидал, ответа ни в поисковиках, ни на форумах не нашел. Вся надежда на вас!
в общем есть блок
Среда : C++ Builder 6 Без блока try catch память не растет, но приложение при ошибке перестает работать, естественно. Читал о том, что в c++ у блока catch отсутствует деструктор. Еще читал про то, что если поставить ключ компиляции /EHa, то catch не будет кушать память.. Помогите, пожалуйста, весь интернет перерыл, не могу найти ответ.
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
18.11.2013, 12:45 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Блок try catch жрет память (C++):
48
Блок try-catch - C++ Работает ли указатель на базовый класс исключения, когда попадает в блок catch - C++ Как передать управление в блок catch после системного исключения (компилятор g++)? - C++
Как записать блок данных в память ? - C++ |
Dreablin
5 / 5 / 1
Регистрация: 05.02.2010
Сообщений: 125
|
|
20.03.2015, 17:06 | #31 |
0
|
Tulosba
:)
![]() 4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
20.03.2015, 17:47 | #32 |
Dreablin, я думаю надо копаться в Indy. Но тут я вряд ли смогу помочь. Кстати, если ещё не видел эту тему, обрати внимание:
http://stackoverflow.com/questions/5...ed-for-indy-10
0
|
Заблокирован
![]() |
|||||||||||
20.03.2015, 22:07 | #33 | ||||||||||
- почему к сожалению?По поводу памяти
- в try{}catch() повешен метод Get, как я понимаю речь идёт об HTTP протоколе, для начала хотелось бы увидеть начинку метода. Если же метод в статической либе то почти 100% в методе идёт нечто аля
Касательно исключений - для начала делаем
Добавлено через 1 минуту Вот пример использования API для работы с Win - эксепшинами https://msdn.microsoft.com/en-us/library/97z4sxfb.aspx Добавлено через 1 минуту Добавлено через 2 минуты - ну тогда тебе тоже сюда https://msdn.microsoft.com/en-us/library/aa297029(v=vs.60).aspx почитай немного литературки о том как происходит обработка исключений в Win а то как то неканает твоё удивление. конкретный CXtypeException вызывает конкретную обработку исключительной ситуации и конкретный класс CXtypeException сбрасывает флаг ошибки + производит на сколько это возможно возвращение стека. Добавлено через 1 минуту Не по теме: Да ForEveR добавлю что CEception является базовым классом для обработки исключений(способен вызвать необходимый обработчик), хотя лан чё мне тебя учить ты ж вроди как тут "светило", думаю msdn открыть сможешь. Короче жду тебя)
0
|
castaway
![]() |
|
20.03.2015, 22:26 | #34 |
-=ЮрА=-, речь о обычных исключениях языка C++.
С чего ты вообще взял что речь идёт именно о ОС Windows? Какого хрена ты приплетаешь сюда какие-то CXtypeException и CEception? В языке нет таких терминов. Почитай хоть раз нормальную книгу по C++ вместе со наброском стандарта. Ты слишком сильно застопорился со своим древним как говно мамонта MFC.
3
|
Заблокирован
![]() |
|||||||||||
20.03.2015, 22:35 | #35 | ||||||||||
Да ForEveR, это для тебя - смотри сам
1
|
Voivoid
677 / 280 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
|
|
20.03.2015, 23:38 | #36 |
Ох, лол, точно. Даже не обратил внимание ( и похоже не я один ), что там указатель. Кроме как в MFC такой дичью вроде никто больше не пользуется, так что похоже действительно оно ( ну или топикстартер просто опечатался ). Приношу извинения за, как оказалось, неуместное троллирование.
0
|
Tulosba
:)
![]() 4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
21.03.2015, 07:38 | #37 |
Voivoid, топикстартеров тут два: один 2013 года с указателем - GibbonCho, другой 2015 со ссылками (см. например код в сообщении #24) - Dreablin. Проблемы первого уже никто в здравом уме тут не обсуждает.
0
|
Заблокирован
![]() |
|
21.03.2015, 09:50 | #39 |
GibbonCho, Dreablin, по прежнему жду полный листинг метода Get на котором улетала память, увижу код скажу конкретно где как и что текло.
0
|
Tulosba
:)
![]() 4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
21.03.2015, 10:31 | #40 |
Если ты ещё не понял, оба ТС используют библиотеку Indy. Get - метод класса этой библиотеки. Хочешь полного кода - качай исходники Indy. Только учти что она писана на Delphi.
Зачем ты сюда приплел MFC и начал баламутить тему подходами от MS я могу только догадываться. ТСы пользуются C++ Builder'ом (RAD Studio), никакой связи с MFC тут и в помине нет.
0
|
Заблокирован
![]() |
|
21.03.2015, 11:00 | #41 |
Если ты вдруг не знал этого то процитирую ВиКи
0
|
Tulosba
:)
![]() 4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
21.03.2015, 16:41 | #42 |
Рад за тебя. Но ТС использует, и ответ ему нужен по совершенно конкретной проблеме, которая, судя по всему, связана с совершенно конкретной библиотекой. Ты о ней не знаешь, я о ней тоже не особо в курсе. Однако твой подход таков, что если у тебя в руке молоток (MFC) - всё можно считать гвоздями (исключения передаются по указателю). Но не надо навязывать молоток людям, которые пилят дрова. Потому что дрова - это не гвозди.
Любой компилятор под винду будет содержать подобный файл. Но из этого вовсе не следует, что исключения будут использоваться в MFC-манере с передачей по указателю. Это с высокой долей вероятности не соответствует действительности. Объясняю почему: 1. GibbonCho (первый ТС) написал перехват по указателю (ты как раз за этот момент зацепился, и приплел сюда MFC), но это ещё не значит, что ТС вообще понимал что пишет. 2. Почему-то ты не учел, что класс называется не CException как принято в MFC, а Exception (базовый класс исключений в VCL). 3. ТС явно указал какую среду он использует Заметь, это не Visual Studio. 4. ТС даже начал сомневаться в исходной постановке задачи: 5. У второго "ТС" (Dreablin) никаких указателей нет и в помине (см. код в сообщении #24). Явная передача по ссылке. После этого ты всё ещё будешь утверждать: ? Или любое исключение, которое возникает в программе под виндой ты называешь "вин исключением"? Удачи.
5
|
Заблокирован
![]() |
||||||
21.03.2015, 17:27 | #43 | |||||
Ещё раз для особо непонятливых речь тут идёт о Билдере
который содержит windows.h, код в посте 1 указывает на механизм эксепшинов WIN(которых ты не знаешь) код Dreablin не соджержит класса эксепшна потому как по всей видимости человек наивно предполагал что catch(...) излечит от всего.
Касательно проблемы - достаточно сделать вот это
Касательно MFC, с ним написана добрая часть ОС окна, что тебе не нравится?Да я определённое время создавал GUI на нём и знаю MFC довольно неплохо и что из этого?
0
|
Tulosba
:)
![]() 4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
21.03.2015, 18:01 | #44 |
Я уже объяснил выше, что это ничего не значит с точки зрения подхода к использованию исключений.
Если бы он содержал например afx.h можно было бы что-то утверждать про твои CException. Может ты сможешь мне показать хотя бы один проект, где используется CException (из MFC) внутри C++Builder проекта? Это могло бы послужить хорошим основанием в поддержку твоей версии. Сообщение #24. Ты его не смотрел? О каком вообще диалоге может идти речь, если ты тупо не читаешь того, что тебе пишут? Про "молоток-гвозди" ты похоже совсем ничего не понял. Не надо видеть MFC там, где его нет.
0
|
Dreablin
5 / 5 / 1
Регистрация: 05.02.2010
Сообщений: 125
|
|
23.03.2015, 17:16 | #45 |
Срач я ваш почитал, но это не дало результат.
Сейчас актуальный вопрос - как сделать, что бы не было исключения при отсутствии ответа по истечении времени ожидания. Диспетчер задач (монитор ресурсов, если точнее) показывает кучу открытых соединений. Либо где-то в Indy есть такая настройка Либо использовать не Indy.
0
|
23.03.2015, 17:16 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
23.03.2015, 17:16 |
Привет! Вот еще темы с ответами:
45
много памяти жрет игра на OpenGL - C++ Браузер Awesomium жрет память - C# WPF
Отрисовка в таймере жрет память - OpenGL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |