Причина выхода за пределы в том, что массивы заполняются значениями постепенно в разных функциях, и в этом процессе, обращение к одной ячейки идет через другую ячейку. Некоторые функции вызываются два раза и последовательно заполняют массив. Но, если в ячейках мусор, то на первом заполнении происходит выход за пределы.
Наверное, проблему можно решить, заранее очищая массивы, но конечно, это доп.головная боль. Жаль.
Привыкните.
Я всегда объявляю массив, ставлю размер ожидаемый, заполняю его значениями (инициализирую). Инициализировать часто лучше не нулем - так легче бывает искать ошибку.
Никогда серьезно не работал с МТ5, а сейчас перевожу на него сразу огромный проект. Естественно, возникают трудности, одна из которых - постоянный выход за пределы массива. В МТ4 такой проблемы не было, как оказывается еще и потому, что массивы не нужно было специально очищать после объявления. А в МТ5 это необходимо. Моя технология требует постепенного заполнения ядра вместе с изменением его размера. Заранее точный размер некоторых массивов неизвестен. При этом, из за большого количества циклов по массивам в процессе их заполнения, происходит выход за пределы. Если бы в ячейках небыло мусора, все давно бы работало.
То есть, с одной стороны мусор в массивах, с другой, критическая ошибка при выходе за пределы. Прям, драконовские условия...
Хочу понять, зачем нужно было убирать автоматическую очитку массивов, вместе с приведением объявленных переменых к нулю, как в МТ4?
Если с переменными еще можно мириться, то постоянно натыкаться на проблемы мусора в больших массивах и самостоятельно заботится об их очистке не только при объявлении, но и при изменении размеров... Зачем?
Тоже сначала столкнулся с подобными трудностями.
На мой взгляд массивы заполняются специфическим образом, это нужно учитывать в частости в циклах.
Петр, не понимаю, о чем ты?
все о том же https://www.mql5.com/ru/forum/293630/page179#comment_10802823
теперь MQL5 виноват... ;)

- 2019.02.28
- www.mql5.com
все о том же https://www.mql5.com/ru/forum/293630/page179#comment_10802823
теперь MQL5 виноват... ;)
Ну да. Что-то я отвык от MQL4.
Николай, не переживайте за МQL4,там все хорошо. Топикстартер заполняет массивы как попало. Все.
Ну да. Что-то я отвык от MQL4.
Конечно же нужно.
Любой уважающий себя и свои программы программист не пустит всё на самотёк. В MQL4, если не использовать #property strict, то можно обратиться к массиву с размером 10 по индексу 20. И ничего не будет - программа продолжит работать, но вот ЧТО там программист возьмёт и будет далее использовать - это лежит на его плечах. Если он с головой, то обязательно всё будет проверять и контролировать, дабы не получать значения за пределами массива, но если он "тяп-ляп", то он не заморачивается таким контролем, и "главное, что работает, а как - ну уж как-нить...".
В большинстве своём как раз-таки взвыли именно такие юзеры - кто ничем не заморачивался, и они теперь хают "плохой, злой и сложный MQL5", потому, что он им не даёт как раньше тяпляпать свои поделки. А вот те, кто изначально думал и делал код с проверками и контролем получаемых данных, тот и не заметил никакой разности в сложности языков, и теперь недоумевает - "где ж там сложность-то - всё так же..."
Никогда серьезно не работал с МТ5, а сейчас перевожу на него сразу огромный проект.
Серьезное отличие по массивам при переписывании
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql4, тонкости и приёмы работы
fxsaber, 2019.02.12 13:12
Особенности ArrayResize для многомерных массивовvoid OnStart() { int Array[][2]; Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14 Print(ArraySize(Array)); // 14 }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Никогда серьезно не работал с МТ5, а сейчас перевожу на него сразу огромный проект. Естественно, возникают трудности, одна из которых - постоянный выход за пределы массива. В МТ4 такой проблемы не было, как оказывается еще и потому, что массивы не нужно было специально очищать после объявления. А в МТ5 это необходимо. Моя технология требует постепенного заполнения ядра вместе с изменением его размера. Заранее точный размер некоторых массивов неизвестен. При этом, из за большого количества циклов по массивам в процессе их заполнения, происходит выход за пределы. Если бы в ячейках небыло мусора, все давно бы работало.
То есть, с одной стороны мусор в массивах, с другой, критическая ошибка при выходе за пределы. Прям, драконовские условия...
Хочу понять, зачем нужно было убирать автоматическую очитку массивов, вместе с приведением объявленных переменых к нулю, как в МТ4?
Если с переменными еще можно мириться, то постоянно натыкаться на проблемы мусора в больших массивах и самостоятельно заботится об их очистке не только при объявлении, но и при изменении размеров... Зачем?