А почему одно и тоже имя переменной используете для глобальной и локальной?
"stack overflow" - это запросто в неконтролируемых рекурсивных вызовах словите.
В любой случае проверим код.
"stack overflow" - это запросто в неконтролируемых рекурсивных вызовах словите.
В любой случае проверим код.
спасибо за пример. нашли ошибку при обработке референсов после рекурсивного вызова.
для того, чтобы не переполнялся стек во время рекурсии, необходимо управлять этой самой рекурсией. во-вторых, можно увеличить размер стека при помощи свойства stacksize. например, так
для того, чтобы не переполнялся стек во время рекурсии, необходимо управлять этой самой рекурсией. во-вторых, можно увеличить размер стека при помощи свойства stacksize. например, так
#property stacksize 65536
Вот попробуйте этот код:
int globa; void start() { f1(); Print("start"); } int f1() { if (globa > 0) Print("globa"); else { globa++; f2(globa); } Print("f1"); } int f2(int& GGG) { f1(); Print("f2"); }
Ошибка возникает когда поток возвращается из f2 в f1.
Если к примеру в первом посте (а рекурсия там управляется) добавить #property stacksize 65536 то в журнале вместо stack overflow будет not enough stack fo parameter. А если из функции f2 убрать указатель то тогда всё заработает нормально.
на самом деле, и то и другое сообщение вызваны нехваткой памяти для рекурсивных вызовов. не допускайте неконтролируемой рекурсии
Во всех приведенных примерах рекурсия контролируемая и вызывается всего один раз, а ошибки возникают всё равно. В том же примере если вместо ссылки в функции сделать просто переменную, а алгоритм не менять всё работает?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А если, вместо
будет
, то будет There has been a critical error.
Если это ошибка, то когда выйдет следующий билд с её исправлением?