Array out of range - страница 2

 
fellow:
необходимо узнать на каком значении индекса массива произошёл сбой
Только через Print() можно узнать. А так вполне достаточно местоположения массива, а дальше смотреть, что в нём не так.
 
fellow:
необходимо узнать на каком значении индекса массива произошёл сбой

Попробуйте измерить размер проблемного массива с помощью функций ArraySize() или ArrayRange(). Это значение и будет искомым "индексом  массива, на котором произошёл сбой".

 
Yedelkin: Попробуйте измерить размер проблемного массива с помощью функций ArraySize() или ArrayRange(). Это значение и будет искомым "индексом  массива, на котором произошёл сбой".

Спасибо, именно это реально помогло. Но все же иногда приходится помучиться...

Странно, почему бы разработчикам не сделать не просто сообщение array out of range in 'arr', но еще и указать номер индекса, при котором обращение вызвало ошибку?

 

А представьте, как было бы  удобно находить, где собака порылась, если была бы обработка исключений?!

У меня есть несколько проблемных участков, где периодически (несколько раз в неделю без всякой системы) вываливается как раз out of range.

Каждое такое место у меня обложено несколькими проверками с принтами. Но это просто некрасиво, когда в стройной логике работы появляется куча одних и тех-же проверок в разных местах.

Код, и так не маленький, распухает бессистемно. 

И есть нормальное, логичное и простое решение - введение обработки исключений, где обработка разных ошибок выделена в одно место.

Но Метаквоты уперлись насмерть, и приходится колоться, плакать, но жрать этот кактус - тыкать в хреновой туче мест эти проверки!


 
Mathemat:

Странно, почему бы разработчикам не сделать не просто сообщение array out of range in 'arr', но еще и указать номер индекса, при котором обращение вызвало ошибку?      

Об этом, наверное, лучше сразу в Сервисдеск. Чтоб на форуме не затерялось.
 
Yedelkin: Об этом, наверное, лучше сразу в Сервисдеск. Чтоб на форуме не затерялось.
Написал.
 
Mathemat:

Странно, почему бы разработчикам не сделать не просто сообщение array out of range in 'arr', но еще и указать номер индекса, при котором обращение вызвало ошибку?

Такая идея могла придти в голову только настоящему математику. :)   Можешь принять как комплимент.

Суть в том что это замедлит выполнение программ, а потому я, например, против. В некоторых языках/системах программирования (не буду тыкать пальцем) существуют варианты компиляции с контролем/без контроля переполнения/выхода за диапазон и т.п.  Метаквоты вряд-ли будут это делать, особенно на фоне постоянных жалоб "настоящих простых трейдеров" на сложность языка. 

Не очень понимаю, неужели недостаточно того, что строку и даже позицию в строке ран-тайм система отлавливает? Мне с избытком хватает.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
MetaDriver:

Суть в том что это замедлит выполнение программ, а потому я, например, против.

Что значит "замедлит выполнение программ"? При наличии такого сообщения программа не замедляется - она попросту перестаёт работать, наскольку я помню. О каком "замедлении работы" идёт речь? Если уж терминал выясняет превышение размера массива и полностью прекращает работу всей программы, почему бы напоследок не допечатать в том же сообщении об ошибке - почему бы не допечатать размер проблемного массива? На скорость выполнения программы это уже никак не повлияет.
 
Yedelkin:
почему бы напоследок не допечатать в том же собщении об ошибке - не доепечатать размер проблемного массива?

Следующим этапом деградации будет: потребовать оператор ForEach, причем всего лишь потому, что индексы самому влом правильно посчитать... :)

--

Почему бы тебе не написать собственный класс массива, и не проконтролировать там всё что душе угодно?

 
MetaDriver:

Следующим этапом деградации будет: потребовать оператор ForEach, причем всего лишь потому, что индексы самому влом правильно посчитать... :)

--

Почему бы тебе не написать собственный класс массива, и не проконтролировать там всё что душе угодно?

Если вопрос ко мне - то, судя по теме, лично меня эта проблема беспокоит мало. Так что "мимо".

Ждём, всё-таки,  ответа на мой вопрос:  "Что значит "замедлит выполнение программ"? При наличии такого сообщения программа не замедляется - она попросту перестаёт работать, наскольку я помню. О каком "замедлении работы" идёт речь?". Пояснения к этому вопросу, как видно из предыдущего сообщения, уже поняты :)