Критическая ошибка Массив вне диапазона!

 

Кусок кода стал выдавать критическую ошибку, Хотя тот же код работает  при подключении к другим советникам.

  {
         //Записываем сообщение в кэш
         Print(" sizeCach ",sizeCache);
         Print(" loCach[0] ",logCache[0]);
         int aaa=ArraySize(logCache); 
         Print(" loCach[1] ",aaa);
         
         logCache[sizeCache++]=log_msg; 
        }

Здесь идет присвоение значения элементу массива, Массив объявляется в этом же фале классе вначале.

class CLogger
  {
private:
   string            project,file; //имя проекта и файла лога
   string            logCache[MAX_CACHE_SIZE]; //максимальный размер кэша
   int               sizeCache;  //счетчик кэша

Проходя дебагером получаю интересный результат

 при присвоении значения с index == 0 на следующем шаге происходит критическая ошибка Массив вне деапазона ИНДЕКС элемента 0   arra 

На тестере та же самая ошибка 

йцу

При этом этот же код работает в другом советнике и ошибок не возникает  Куда копать ?

 
Igor Petrov:

Куда копать ?

В направлении воспроизводимого примера.

 

Обьект создается одинаково для всех советников в коде  

CLogger logger;

в событии  OnInit = on_init(); Инициализация

В событии onTick три записи 

 logger.init(); 

 logger.flush();                      //Сбрасываем буфер

   logger.deinit();                     //Деинициализация  

  Закоментировал весь код советника, оставил только эти три строчки. Результат тот же массив вне диапазона. 

убираю прибавление 1   sizeCache++ оставляю  logCache[sizeCache] работает корректно но устанавливает значение только на индексе 0  Выношу переменную  sizeCache++ за присвоение элементу массива значения

         logCache[sizeCache]=log_msg; 
       	   sizeCache++;

Вылетает ошибка Переполнения стека  чва

 
Igor Petrov:

Обьект создается одинаково для всех советников в коде  

CLogger logger;

в событии  OnInit = on_init(); Инициализация

В событии onTick три записи 

  Закоментировал весь код советника, оставил только эти три строчки. Результат тот же массив вне диапазона. 

До тех пор, пока не получится запустить воспроизводимый код (например, мне), вряд ли кто-то что-то сможет посоветовать. Разве что угадает.

Сейчас Вы предлагаете смотреть в замочную скважину, спрашивая, почему не работает телевизор за дверью.

 
Igor Petrov:

Обьект создается одинаково для всех советников в коде  

CLogger logger;

в событии  OnInit = on_init(); Инициализация

В событии onTick три записи 

  Закоментировал весь код советника, оставил только эти три строчки. Результат тот же массив вне диапазона. 

убираю прибавление 1   sizeCache++ оставляю  logCache[sizeCache] работает корректно но устанавливает значение только на индексе 0  Выношу переменную  sizeCache++ за присвоение элементу массива значения

Вылетает ошибка Переполнения стека 

ну очень БОЛШОЙ массив(или объёкт) создан на стеке. Возможно рекурсивно.

не обязательно пресловутый CLogger. Может быть в совершенно другом месте

Причина обращения: