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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.97
mustardandrew
Человек
96 / 80 / 3
Регистрация: 16.06.2009
Сообщений: 229
#1

Stack overflow. - C++

17.06.2009, 10:31. Просмотров 5131. Ответов 6
Метки нет (Все метки)

У меня в программе есть реверсивная функция (много параметров) она вызывает себя очень много раз. Во время выполнения программы возникает ошибка Stack overflow.

Может кто-то знает, как в компиляторе (Visual Studia 2005 или Dev-C++ ) поставить больший размер стека?

Или может функцию лучше разбить на несколько?(

Добавлено через 3 минуты 39 секунд
Или может функцию лучше разбить на несколько?(
Если ето поможет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2009, 10:31     Stack overflow.
Посмотрите здесь:

Stack overflow - C++
Написал #include "stdafx.h" #include <iostream> using namespace std; #include <math.h> #include <iomanip> #include...

Переполнение (Stack overflow) - C++
Подскажите, пожалуйста, почему при перемещении int n, a, k; в локальную область программа при открытии консоли выдаёт ошибку и не работает,...

Почему stack overflow? - C++
Почему приведенный ниже код сразу же приводит к переполнению стека? int _tmain(int argc, _TCHAR* argv) { unsigned lоng...

Непонятный Stack Overflow - C++
Здравствуйте, уважаемые форумчане.Столкнулся с непонятной мне проблемой при решении одной лёгкой олимпидной задачи. Вот условие...

Stack overflow с тернарным оператором - C++
Так работает: unsigned long Ly(const string &s) { ... } unsigned long Rs(const string &s) { ... } unsigned long(*F)(const string...

Возникает ошибка Stack overflow - C++
Задача должна рассчитывать функцию рекуррентного сложения. Но возникает ошибка "Stack overflow". Пытался ставить double, long int - не...

Обработка исключений stack overflow - C++
Помогите... Опишите функцию умножения двух чисел с плавающей запятой, обработайте ошибку переполнения сверху (overflow).

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
17.06.2009, 11:43     Stack overflow. #2
MSDN
SetThreadStackGuarantee Function

Sets the minimum size of the stack associated with the calling thread or fiber that will be available during any stack overflow exceptions. This is useful for handling stack overflow exceptions; the application can safely use the specified number of bytes during exception handling.


BOOL WINAPI SetThreadStackGuarantee(
__in_out PULONG StackSizeInBytes
);

Parameters
StackSizeInBytes
The size of the stack, in bytes. On return, this value is set to the size of the previous stack, in bytes.

If this parameter is 0 (zero), the function succeeds and the parameter contains the size of the current stack.

If the specified size is less than the current size, the function succeeds but ignores this request. Therefore, you cannot use this function to reduce the size of the stack.

This value cannot be larger than the reserved stack size.

Return Value
If the function succeeds, the return value is nonzero.

If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError.
Добавлено через 4 минуты 13 секунд
другой способ:
в параметрах проекта прописать в меню "компоновщик"-"система"
строка "резервируемый размер стека" - объем в байтах
или ключ компоновщика "/STACK:xxxx"
xxx - размер в байтах
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
17.06.2009, 12:13     Stack overflow. #3
Вот ить... а под линухов вроде бы как нельзя для процесса размер стека указать программно, только для потока (и то появилось недавно)
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
17.06.2009, 12:23     Stack overflow. #4
Цитата Сообщение от Evg Посмотреть сообщение
а под линухов вроде бы как нельзя для процесса размер стека указать программно
не понял...
процесс может работать без потока?
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
17.06.2009, 12:29     Stack overflow. #5
Цитата Сообщение от Patch Посмотреть сообщение
не понял...
процесс может работать без потока?
Вопроса не понял.

Грубо говоря, компилишь ты в a.out и у тебя нет возможности задать размер стека при исполнении a.out. Но когда внутри a.out ты создаёшь поток, то при создании потока можно указать для него (потока) размер стека
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
17.06.2009, 12:33     Stack overflow. #6
Цитата Сообщение от Evg Посмотреть сообщение
Но когда внутри a.out ты создаёшь поток, то при создании потока можно указать для него (потока) размер стека
т.е., изменить размер своего стека под линухом нельзя?
только при создании другого потока, указав в параметрах функции?
мдя-я-а-а...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2009, 12:46     Stack overflow.
Еще ссылки по теме:

Stack Overflow, перегруз буфера - C++
Добрый день, знаком с перегрузом буфера в теории, хотел бы перейти к практике. Написал простенькую программу, int main(int argc) ...

Quicksort - исключение stack overflow - C++
Алгоритм сортирует таблицу со случайными числами на 100тыс, 500тыс, 1млн, но при сортировке уже отсортированной таблицы или таблицы обратно...

Ошибка исполнения Stack overflow - C++
Решил написать что-то вроде стратегии в консоле, но в итоге застрял в самом начале ( не могу найти нормальный способ сравнивать строки, уже...

Bitset<8388608> - Stack overflow - C++
Пишу: bitset&lt;8388608&gt; hash; // (256^2)/2 Ошибка: Stakc overflow (ОЗУ&gt;3 Гб, но как я понял приложение не может пользоваться больше...

Разобраться с рекурсией: stack overflow - C++
#include&lt;iostream&gt; #include&lt;vector&gt; #include&lt;string&gt; #include&lt;math.h&gt; #include&lt;cmath&gt; #include&lt;algorithm&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
17.06.2009, 12:46     Stack overflow. #7
Цитата Сообщение от Patch Посмотреть сообщение
т.е., изменить размер своего стека под линухом нельзя?
У меня нет 100% уверенности, но вроде бы нет. Может быть на последних версиях линуха и можно, но года 3 назад мы не смогли, только изменив настройку в ядре
Yandex
Объявления
17.06.2009, 12:46     Stack overflow.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru