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

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Прохождение лабиринта в двумерном массиве http://www.cyberforum.ru/cpp-beginners/thread391808.html
Мне очень нужна программа по прохождению лабиринта в двумерном массиве...вопрос жизни и смерти...В программировании я полный лох, а программа очень нужна, напишите пожалуйста рабочую в С++.. Сам пытался что-то поискать-наткнулся на эту, но что именно там происходит не понимаю, если она правильная, объясните пожалуйста, что в ней? #include <iostream> #include <windows.h> #include <conio.h>...
C++ нужна дерево решения для примера! дано пятизначное число найти число полученное при прочтении его цифр с справа налево http://www.cyberforum.ru/cpp-beginners/thread391807.html
вот такой вот пример C++
даны числа a1,a2,...,a10.Определить их сумму оператор цикла и условного оператора! как это ?
C++ что с такой задачей делать ...
Используя рекурсию, ввести группу данных и вывести их в обратном порядке, не объявляя массива.
C++ задача на языке С++ http://www.cyberforum.ru/cpp-beginners/thread391798.html
Помогите пожалуйста решить на языке С++ Файловые потоки 1. Файл содержит длины создать случайным образом программным путём. Вывести содержимое файла по 10 чисел в строке.Вычислить минимальное,максимальное и среднее значение файла. 2.Текстовый файл содержит ответы по одному в каждой строке.Организовать диалог пользователем,который задаёт вопрос с клавиатуры и получает очередной ответ из...
C++ Является ли сумма цифр числа двузначным числом Дано двузначное число. Определить: 1)Является ли суммы этих чисел двузначным числом. 2)Больше ли число а суммы этих чисел. как двузначное число например 34 разбить на 3 4 ! чет в с+ не могу понять ! в паскале это можно сделать с помощью div mod! заранее Спасибо! подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
25.11.2011, 20:51     при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
Сразу огорчу, нет универсального способа. Лучше менять алгоритм.
Хотя бы потому, что размер стека задается при компиляции и не известен программе во время исполнения.
В качестве костыля, можно ограничить его вручную.
Пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <string>
#include <iostream>
#include <exception>
 
static char *stackBegin;
static int stackSize;
 
int getStackSize() {
  char stackPosition;
  int currentStackSize = (&stackPosition) - stackBegin;
  if (currentStackSize < 0) currentStackSize = -currentStackSize;
  return currentStackSize;
}
 
long int stackEater(long int n) {
  if (getStackSize() < stackSize) {
    int result = stackEater(n + 1);
    return result;
  } else {
    return n;
  }
}
 
int main(int argc, char *argv[]) {
  char stackTop;
  stackBegin = &stackTop;
  stackSize = 120 * 1024;
  
  std::cout << stackEater(1) << std::endl;
  return 0;
}
 
Текущее время: 18:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru