Позволяет делать математику: структура почти 160KB размера (201 * 201 * 4 (sizeof(int)
)), каждый вызов создает два из этих случаев на стек, один для аргумента A
, один для переменной B
, что означает, что каждый вызов использует около 320 КБ стека. У вас три вызова, так что это 960 КБ. Plus Исходная переменная T
в функции main
увеличивает размер стека, используемого для 1120kB, что превышает размер стека по умолчанию 1024kB, используемый в Windows. Преодоление переполнения стека и вашего сбоя.
Абсолютное простейшее решение? Сделать аргумент функции постоянной эталонным, то есть
Tablica test(const Tablica& A, int m)
Проблема в том, что вы до сих пор, по крайней мере, один раз, например каждый вызов в стеке, переменную B
, так что просто дает вам несколько больше рекурсивный вызовы до истечения срока действия стека.
Более сложным решением было бы использовать std::vector
для данных в структуре, которые помещают данные в кучу и уменьшают структуру на несколько величин. Это, вместе с вышеприведенным решением для использования ссылки для аргумента, является более долгосрочным решением и позволит вам довольно много рекурсивных вызовов до окончания стека. Это не будет длиться вечно, хотя стек - это ограниченный ресурс, и рано или поздно вы все равно закончите.
Рекомендованное решение заключается в увеличении размера стека для процесса, и это происходит только тогда, когда последнее решение превысило предел, но тогда вы должны начать думать о других и лучших проектах, чтобы решить вашу проблему, прежде чем увеличивать стек размер.
выглядят как stackoverflow. И 'Tablica' никогда не затрагивается функцией, поэтому я сомневаюсь в ее релевантности ... – UmNyobe
Windows говорит, что программа остановила работу после того, как я запустил это. – peterSweter
Что произойдет, если вы попробуете 'test (T, 1);'? – Beta