Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2022, 19:27   #1
Динара Хусаинова
Новичок
Джуниор
 
Регистрация: 19.03.2022
Сообщений: 1
По умолчанию Как обойти предупреждение на С++ C6262 Функция использует 133336 байт в стеке

Помогите решить проблему, при написании кода выходит ошибка С6262. «Функция использует 133360 байт в стеке: это превышает значение 16384. Попробуйте переместить некоторые данные в кучу.» Как именно можно обойти это предупреждение и запустить программу? Очень прошу дать четкий ответ! Буду очень благодарна. Ниже приведен мой код:

Код:
#include <iostream>
#include <string>
using namespace std;
int spigot() {
#define n 10000       //max digits to compute
#define size (10*n/3) 
  int i;
  int j;
  int t;
  int a;
  int w, ni, vivod;
  int arr[size];
  for (j = 1; j < size;) {
    arr[j] = 2;
    ni = 0;
    vivod = 0;
    for (j = 1; j < n;) {
      for (i = size; i > 0;) {
        w = 10 * arr[i] + a * i;
        arr[i] = w % (2 * i - 1);
        a = w / (2 * i - 1);
      }
      arr[1] = a % 10;
      a = a / 10;
      if (a == 9) {
        ni = ni + 1;
      }

      else if (a == 10) {
        cout << vivod + 1;
        for (t = 1; t < ni;) {
          cout << 0;
          vivod = 0;
          ni = 0;

        }
      }
      else {
        cout << vivod;
        vivod = a;
        if (ni != 0) {
          for (t = 1; t < ni;) {
            cout << 9;
            ni = 0;
          }
        }
      }

    }
  }
  cout << vivod << endl;
  return 0;
}
int main() {
  spigot();

  
  return 0;
}
Изображения
Тип файла: png 65BACD7F-51C1-4967-A5F9-6FDFBC94627E.png (23.1 Кб, 0 просмотров)

Последний раз редактировалось BDA; 19.03.2022 в 20:38.
Динара Хусаинова вне форума Ответить с цитированием
Старый 19.03.2022, 20:42   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Используйте динамическое выделение памяти:
Код:
int *arr = new int[size];
...
delete[] arr;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.03.2022, 08:27   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 965
По умолчанию

Динара Хусаинова, не тестировал и не вникал, только отформатировал и навёл косметический ремонт + заменил массив на вектор
Однако вызывает подозрение, что везде в циклах индекс начинается с 1
Код:
#include <iostream>
#include <vector>

int spigot()
{
    constexpr size_t n=10000;//max digits to compute

    size_t vivod{};
    std::vector<int> arr(10*n/3);
    for (size_t j = 1; j < arr.size();)
    {
        arr[j] = 2;
        size_t ni = 0;
        vivod = 0;
        for (j = 1; j < n;)
        {
            size_t a{};
            for (size_t i = arr.size(); i > 0;)
            {
                size_t w = 10 * arr[i] + a * i;
                arr[i] = w % (2 * i - 1);
                a = w / (2 * i - 1);
            }
            
            arr[1] = a % 10;
            a = a / 10;
            if (a == 9)
            {
                ni = ni + 1;
            }
            
            else if (a == 10)
            {
                std::cout << vivod + 1;
                for (size_t i = 1; i < ni;)
                {
                    std::cout << 0;
                    vivod = 0;
                    ni = 0;
                }
            }
            else
            {
                std::cout << vivod;
                vivod = a;
                if (ni != 0)
                {
                    for (size_t i = 1; i < ni;)
                    {
                        std::cout << 9;
                        ni = 0;
                    }
                }
            }
        }
    }
    
    std::cout << vivod << std::endl;
    return 0;
}

int main()
{
    spigot();
    return 0;
}
Алексей1153 вне форума Ответить с цитированием
Старый 20.03.2022, 15:52   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Динара Хусаинова Посмотреть сообщение
for (i = size;
Кстати, выход за границы массива получился.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, какой оператор программы затирает память в стеке? Astradam Win Api 1 13.02.2017 14:58
Функция изменяет старший байт числа на заданное значение,не изменяя младший байт ( C++ ) Любимый_1 Помощь студентам 3 07.10.2013 16:42
Как средствами C# определить какой процесс использует интернет qwq C# (си шарп) 0 04.09.2013 15:07
Как обойти предупреждение Outlook при отправке диапазона по почте? Sergey112233 Microsoft Office Excel 11 07.11.2011 19:33
Найти байт максимальным количестов единиц и байт с максмальным количеством нулей и разность (ассемблер) Beren42 Помощь студентам 0 15.12.2010 20:32