Новшества в операциях с массивами.

 

До последнего обновления такой код не вызывал никаких ошибок.

Массив объявлен на уровне глобальных переменных.

int listTickets[][6];

затем по условию увеличивается размер массива в первом измерении и в зависимости от типа позиции или ордера по индексу второго измерения заносится в массив тикет ордера/позиции. И остальные индексы заполняются нулями.

Затем при условии что в массиве не менее двух элементов проверяется есть-ли в массиве тикет такого типа ордер или позиция

     if(ArrayRange(listTickets, 0) >= 2)
      {
       if(listTickets[1][4] == 0)
       // не важно что делаем;
      }

А теперь на стадии компиляции выдаёт

'listTickets' - index out of range      test.mq5    165     11


Не перебор-ли это? Как вы думаете?

Да и что-то я никак не соображу как-бы обойти это. Даже попытка увеличения размера массива в OnInit не избавляет от этой ошибки компиляции. Если сделать массив статическим, не известно сколько может быть ордеров в итоге, а изменить размер уже будет невозможно.

cannot be used for static allocated array       test.mq5    81      9

Сделать с запасом... память не безразмерная.

 
int listTickets[][6];

int OnInit()
{
     if(ArrayRange(listTickets, 0) >= 2)
      {
       if(listTickets[1][4] == 0)
       {
          // не важно что делаем;
       }
      }
      else
      {
          printf( "ArrayRange 1: %s", IntegerToString(ArrayRange(listTickets, 1)));
          printf( "ArrayRange 0: %s", IntegerToString(ArrayRange(listTickets, 0)));
      }
     return(INIT_SUCCEEDED);
}

Проверил. Даже откомпилированный на графике запустил. Без ошибок.

Да и по коду сразу видно что все нормально.

 
Alexey Viktorov:

До последнего обновления такой код не вызывал никаких ошибок.

Массив объявлен на уровне глобальных переменных.

затем по условию увеличивается размер массива в первом измерении и в зависимости от типа позиции или ордера по индексу второго измерения заносится в массив тикет ордера/позиции. И остальные индексы заполняются нулями.

Затем при условии что в массиве не менее двух элементов проверяется есть-ли в массиве тикет такого типа ордер или позиция

А теперь на стадии компиляции выдаёт

Не перебор-ли это? Как вы думаете?

Да и что-то я никак не соображу как-бы обойти это. Даже попытка увеличения размера массива в OnInit не избавляет от этой ошибки компиляции. Если сделать массив статическим, не известно сколько может быть ордеров в итоге, а изменить размер уже будет невозможно.

Сделать с запасом... память не безразмерная.

Всё нормально работает, и конструкция вполне жизнеспособна. Я буквально дня три назад переделал у себя такие массивы, в массив структуры, немного проще работать со структурой.

 
Konstantin Nikitin:

Проверил. Даже откомпилированный на графике запустил. Без ошибок.

Да и по коду сразу видно что все нормально.

Интересно, тогда я не понимаю что происходит... А какой билд? До 1795 у меня тоже всё работало. Или вы проверяете в mql4? Моя вина, не уточнил что пишу в mql5.

 
Alexey Viktorov:

Интересно, тогда я не понимаю что происходит... А какой билд? До 1795 у меня тоже всё работало. Или вы проверяете в mql4? Моя вина, не уточнил что пишу в mql5.

Проверяю в мт5, билд компилятора 1795

 
Alexey Viktorov:

Интересно, тогда я не понимаю что происходит... А какой билд? До 1795 у меня тоже всё работало. Или вы проверяете в mql4? Моя вина, не уточнил что пишу в mql5.

Перезагрузись.

 
Vitaly Muzichenko:

Всё нормально работает, и конструкция вполне жизнеспособна. Я буквально дня три назад переделал у себя такие массивы, в массив структуры, немного проще работать со структурой.

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

Возможно придётся возвращаться к структуре.

 
Alexey Viktorov:

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

Возможно придётся возвращаться к структуре.

В структуру всего 2-мя кликами можно добавить нужное поле, с ней наглядней работать. Не мне вам объяснять)

 
Artyom Trishkin:

Перезагрузись.

Чудеса, да и только.

В следующий раз переставлю ОС.

 
Vitaly Muzichenko:

В структуру всего 2-мя кликами можно добавить нужное поле, с ней наглядней работать. Не мне вам объяснять)

Добавить-то не проблема. А очистить от мусора простой двухмерный массив попроще, как мне показалось.

 
Alexey Viktorov:

Чудеса, да и только.

В следующий раз переставлю ОС.

И хату поменяй
Причина обращения: