Errori, bug, domande - pagina 2488

 

Potrei sbagliarmi naturalmente, ma sembra che 2 mesi fa il mio modello funzionasse, e ora quando chiamo il distruttore CList, gli oggetti non distrutti rimangono in memoria, codice:

#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 oggetti di tipo CData left

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 byte di memoria leaked

MT5 build 2085
 
Igor Makanu:

Potrei sbagliarmi naturalmente, ma sembra che 2 mesi fa il mio modello funzionasse, ma ora quando chiamo il distruttore CList, gli oggetti che non sono stati distrutti rimangono in memoria, il codice:

#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:

Sì, probabilmente hai ragione, il tuo esempio funziona correttamente, da qualche parte ho confuso gli esempi di test nelle mie fonti

Grazie!

 
Вероника Сорокина:
Buon pomeriggio. Ecco la situazione. Il mio Expert Advisor/Script/indicatore/qualunque cosa io abbia scritto non è attaccato ad una finestra del grafico, voglio che rimanga attaccato ad un programma... tipo, scriverò una cosa utile e non voglio che sia attaccato a nuovi grafici aperti tutto il tempo. Qualcosa come un servizio (da MT5), ma ne hai bisogno su MT4.

Utilizzare i servizi

 

È possibile aggiungere il codice attuale di ME ai preferiti del terminale?



In realtà, mi piacerebbe avere una scheda separata "Debugging" dove potrei aggiungere il codice che è attualmente scritto e testato.

Ora si scopre che per un lavoro conveniente è necessario avere un Terminale separato, dove tutto ciò che non riguarda i progetti correnti è assente.

Allora il debug è molto più veloce, perché non c'è confusione con il resto del codice nel terminale stesso.

 

Cari sviluppatori. Per favore chiarite, è normale il ripartizionamento automatico dei buffer degli indicatori? Per ri-partizionamento intendo quanto segue: max barre nella finestra, per esempio 5000. La dimensione del buffer + rates_total sono resettati a 5000 quando raggiungono 6439. Lo stesso accade quando max barre in finestra = 10000. Il reset avviene al 11439.

A causa di questo gli indicatori possono bloccarsi e mostrare dati errati.

Costruire 2085. Ho notato questo comportamento da circa 2000 builds.

 
Alexey Kozitsyn:

Cari sviluppatori. Per favore chiarite, è normale il ripartizionamento automatico dei buffer degli indicatori? Per ri-partizionamento intendo quanto segue: max barre nella finestra, per esempio 5000. La dimensione del buffer + rates_total sono resettati a 5000 quando raggiungono 6439. Lo stesso accade quando max barre in finestra = 10000. Il reset avviene al 11439.

A causa di questo gli indicatori possono bloccarsi e mostrare dati errati.

Costruire 2085. Ho notato questo comportamento da circa 2000 builds.

Questo comportamento era originariamente in cinque.

Dare un esempio di un crash dell'indicatore dovuto alla riallocazione del buffer

 
Slava:

Questo è stato il comportamento di Five fin dall'inizio.

Dare un esempio di crash dell'indicatore a causa della ridistribuzione dei buffer

Quindi stai confermando che quando c'è un accumulo di 1439 barre sopra la norma, il terminale DEVE reimpostare la dimensione del buffer al valore delle barre massime nella finestra? Se sì, questo dovrebbe essere menzionato nella documentazione. Poiché si tratta di un comportamento imprevisto.

Per quanto riguarda l'esempio. Intendo sviluppi personalizzati che funzionano con i numeri delle barre. Cioè ho memorizzato la barra numero 6438 e dopo 2 minuti (M1 TF) i buffer sono stati ridistribuiti e sono uscito dall'array. Ora è chiaro che questo è un comportamento "standard". Si prega di aggiornare la documentazione.

 

Errore durante l'esecuzione:

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();
}

Risultato: 1

Atteso: 2 o (come in C++) - errore di compilazione

 
Alexey Kozitsyn:

Si prega di aggiornare la documentazione.

Dove è necessario aggiornare la documentazione?

L'identificatore inequivocabile di una barra è sempre stato il tempo della barra, non il numero della barra.

Se qualcuno chiamasse ChartSetSymbolPeriod sul tuo grafico, potresti facilmente cogliere un cambiamento nel numero di barre. Sorpresa?

A proposito, c'è il parametro rates_total in OnCalculate