std::bad_alloc для стека?
От: Максим Рогожин Россия  
Дата: 25.08.18 16:51
Оценка:
Привет!

template<typename T>
void func1() {
   try {
      T* obj = new T();
   } catch(std::bad_alloc) {
     // освободить ненужные ресурсы
   }
}

template<typename T>
void func2() {
   T ojb; // Как определить что стек закончился? И что делать?
}
Отредактировано 25.08.2018 16:52 Максим Рогожин . Предыдущая версия .
Re: std::bad_alloc для стека?
От: kov_serg Россия  
Дата: 25.08.18 17:17
Оценка: 8 (1) +1
Здравствуйте, Максим Рогожин, Вы писали:

МР>template<typename T>

МР>void func2() {
МР> T ojb; // Как определить что стек закончился? И что делать?
МР>}
Не делать таких больших объектов.
Вообще отказаться от динамческой памяти.
Выделять в стеке который вы сами контролируете.

https://jeffpar.github.io/kbarchive/kb/315/Q315937/
https://stackoverflow.com/questions/29349307/how-to-trap-stack-overflow-in-a-windows-x64-c-application
Re[2]: std::bad_alloc для стека?
От: Максим Рогожин Россия  
Дата: 25.08.18 17:43
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Не делать таких больших объектов.

_>Вообще отказаться от динамческой памяти.
_>Выделять в стеке который вы сами контролируете.

_>https://jeffpar.github.io/kbarchive/kb/315/Q315937/

_>https://stackoverflow.com/questions/29349307/how-to-trap-stack-overflow-in-a-windows-x64-c-application

А стандартом не предусмотрена обработка (исключение, например) ситуации когда на стеке больше нет места?
Почему стандартом предусмотрено исключение для нехватки динамической памяти, но не предусмотрено для памяти на стеке?
Re[3]: std::bad_alloc для стека?
От: kov_serg Россия  
Дата: 25.08.18 19:31
Оценка: +1
Здравствуйте, Максим Рогожин, Вы писали:

МР>А стандартом не предусмотрена обработка (исключение, например) ситуации когда на стеке больше нет места?

МР>Почему стандартом предусмотрено исключение для нехватки динамической памяти, но не предусмотрено для памяти на стеке?
Там много чего не предусмотрено
Re: std::bad_alloc для стека?
От: Alexander G Украина  
Дата: 26.08.18 10:30
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:


МР> T ojb; // Как определить что стек закончился? И что делать?


Это действительно проблема.
Не на всех платформах это можно хорошо обработать.

И даже поймать не везде можно, есть такая экзотика, где стек — круговой буфер, или вот в дотнете исключение переполнения стека — неуловимое.

Windows-specific / Visuas Studio specific решение было выше приведено.
Русский военный корабль идёт ко дну!
Отредактировано 26.08.2018 10:32 Alexander G . Предыдущая версия .
Re[3]: std::bad_alloc для стека?
От: reversecode google
Дата: 27.08.18 08:30
Оценка:
и че по вашему делать когда ловится исключение на переполнение стека ?

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