2010.01.31 12:19:02 DemarkTrendLines (GBPUSD,D1) Access violation write to 0xBFF00000 in 'F:\metatrader52\MQL5\Indicators\DemarkTrendLines.ex5'

 

билд 240, при навешивании индикатора на график выдается сообщение

2010.01.31 12:19:02 DemarkTrendLines (GBPUSD,D1) Access violation write to 0xBFF00000 in 'F:\metatrader52\MQL5\Indicators\DemarkTrendLines.ex5'
 

, что это значит?

 

в тексте есть строка:

 

printf( "for shift = %i", shift );

 

если ее закомментировать, то ошибка исчезает.

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

выполнение скрипта 

 


ENUM_TIMEFRAMES TFMigrate(int tf)
{
   switch(tf)
   {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      
      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);      
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);      

      default: return(PERIOD_CURRENT);
   }
}


double iHigh(string symbol,int tf,int index){
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyHigh(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]);
   else return(-1);
}

double High( int i ){  return( iHigh( NULL, 0, i )      ); }

void OnStart(){
  
  for(int i=10; i>0; i--){
    Print( "high=", High(i) ); 
  }

  
  
}


   приводит к крешу терминала

 

 

 

 

 

 

 

 

 
gdtt:

выполнение скрипта
   приводит к крешу терминала

Сообщите дополнительные сведения, пожалуйста. На Windows XP с терминалом билд 242 креш не воспроизводится.
 
Rosh писал(а)  :
Сообщите дополнительные сведения, пожалуйста. На Windows XP с терминалом билд 242 креш не воспроизводится.

билд, скачанный по ссылке, указанной в посте:

 

Alexander 2010.01.29 18:43 #

MetaTrader 5 Client Terminal build 242

 в ветке https://www.mql5.com/ru/forum/23/page3

 

по кнопке about дает

 

 

 

 

 при старте терминала попытался скачать билд 242, выдал ошибку, больше попыток не делает.

 

 

 

после замены

 в скрипте строки

 

double High( int i ){ return( iHigh( NULL, 0, i ) ); } 

на

double High( int i ){ return( iHigh( Symbol(), 0, i ) ); }

все работает нормально, в том числе ушла ошибка, указанная в первом посте.

может быть я и не прав( в справке не сказано, что можно передавать  NULL ) в функцию CopyHigh, но это не должно приводить к крешу. 

 

 

 

в отладчике

это выглядит так:

 


при вызове функции iHigh передаются параметры
NULL, 0, i
где i == 10

в теле iHigh получает параметры см. Expression отладчика:
NULL, 10, 0
как так?

Список изменений в билдах MetaTrader 5 Client Terminal
Список изменений в билдах MetaTrader 5 Client Terminal
  • www.mql5.com
Автоматическое обновление доступно через систему LiveUpdate:.
 

в 242 билде конструкция 

double High( int i ){ return( iHigh( NULL , 0, i ) );

 

работает, возвращает, как и ожидалось, значения для символа графика, на котором исполняется скрипт.

тему можно сносить