Ошибки, баги, вопросы - страница 2488

 

могу конечно ошибаться, но кажется 2 месяца назад мой шаблон работал, а теперь при вызове деструктора CList  в памяти остаются не уничтоженные объекты, код:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                *Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T *operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr = new T; Tptr  = value; mlist.Add(Tptr);       }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData>*data=new CDataBase<CData>;
   int i;
   for(i=0; i<5; i++)
     {
      data.AddValue(new CData(i,i*2.0));
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 undeleted objects left

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 objects of type CData left

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 bytes of leaked memory

МТ5 билд 2085
 
Igor Makanu:

могу конечно ошибаться, но кажется 2 месяца назад мой шаблон работал, а теперь при вызове деструктора CList  в памяти остаются не уничтоженные объекты, код:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr  = value; mlist.Add(Tptr);      }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData*>* data=new CDataBase<CData*>;
   int i;
   for(i=0; i<5; i++)
     {
      CData* Tmp = new CData(i,i*2.0);
      data.AddValue(Tmp);
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+
 
fxsaber:

да, наверное Вы правы, Ваш пример правильно работает, где то перепутал у себя в исходниках тестовые примеры

Спасибо!

 
Вероника Сорокина:
Добрый день. Такая ситуация. ОООчень нужно чтобы советник/скрипт/индикатор/ещеКакаяНибудьШтука написана мною на mql4 не привязывалась именно к окну с графиком, нужно чтобы к программе.. ну типа, я напишу полезную мне штуку и не хочу включать ее постоянно к новым открытым графикам, хочу чтобы она оставалась. Что-то типа сервиса(из MT5), но нужно именно на МТ4. 

Используйте сервисы

 

Возможно ли из ME добавить текущий код в Избранное Терминала?



На самом деле хотелось бы иметь отдельную вкладку "Отладка", куда можно было бы добавлять коды, которые сейчас пишутся и тестируются.

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

Тогда получается отладка гораздо быстрее, т.к. не рябит от остальных кодов в самом Терминале.

 

Уважаемые разработчики. Уточните пожалуйста, автоматическая переразметка буферов индикатора - это нормально? Под переразметкой я понимаю следующее: макс. баров в окне, например 5000. Размер буфера + rates_total сбрасываются на 5000 по достижении размера 6439. Аналогично происходит в случае, когда макс. баров в окне = 10000. Сброс происходит при 11439.

Из-за этого индикаторы могут крашиться и показывать некорректные данные.

Билд 2085. Подобное поведение заметил где-то с 2000-х билдов.

 
Alexey Kozitsyn:

Уважаемые разработчики. Уточните пожалуйста, автоматическая переразметка буферов индикатора - это нормально? Под переразметкой я понимаю следующее: макс. баров в окне, например 5000. Размер буфера + rates_total сбрасываются на 5000 по достижении размера 6439. Аналогично происходит в случае, когда макс. баров в окне = 10000. Сброс происходит при 11439.

Из-за этого индикаторы могут крашиться и показывать некорректные данные.

Билд 2085. Подобное поведение заметил где-то с 2000-х билдов.

Такое поведение в пятёрке было изначально.

Приведите пример крэша индикатора из-за перераспределения буферов

 
Slava:

Такое поведение в пятёрке было изначально.

Приведите пример крэша индикатора из-за перераспределения буферов

Т.е. Вы подтверждаете, что когда происходит накопление 1439 баров сверх нормы, терминал ПРИНУДИТЕЛЬНО сбрасывает размер буферов до значения макс. баров в окне? Если ДА, то об этом необходимо указать в документации. Т.к. это непредвиденное поведение.

По поводу примера. Имею ввиду кастомные разработки, которые работают с номерами баров. Т.е. запомнил номер бара 6438, а через 2 минуты (ТФ М1) буферы перераспределились и получился выход за пределы массива. Теперь понятно, что это "стандартное" поведение. Обновите документацию, пожалуйста.

 

Ошибка при выполнении:

class A { public:
        virtual void f( int = 0 ) { Print( 1 ); }
};
class B : public A { public:
        virtual void f( int     ) { Print( 2 ); }
};
void OnStart()
{
        B b;
        b.f();
}

Результат  : 1

Ожидалось: 2 или (как в С++) - ошибка при компиляции

 
Alexey Kozitsyn:

Обновите документацию, пожалуйста.

В каком месте нужно обновить документацию?

Однозначным идентификаторам бара всегда было время бара, а никак не его номер.

Если вашему графику кто-то вызвал ChartSetSymbolPeriod, то вы запросто словите изменение количества баров. Сюрприз?

Да, кстати, в OnCalculate есть такой параметр rates_total

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