Hatalar, hatalar, sorular - sayfa 2488

 

Elbette yanılıyor olabilirim ama öyle görünüyor ki 2 ay önce şablonum çalıştı ve şimdi CList yıkıcısı çağrıldığında, yok edilmeyen nesneler bellekte kalıyor, kod:

 #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 silinmemiş nesne kaldı

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData türünde 5 nesne kaldı

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 bayt sızdırılmış bellek

MT5 yapı 2085
 
Igor Makanu :

Elbette yanılıyor olabilirim ama öyle görünüyor ki 2 ay önce şablonum çalıştı ve şimdi CList yıkıcısı çağrıldığında, yok edilmeyen nesneler bellekte kalıyor, kod:

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

evet, muhtemelen haklısın, örneğiniz doğru çalışıyor, bir yerde kaynaklarımdaki test senaryolarını karıştırdım

Teşekkür ederim!

 
Вероника Сорокина :
Tünaydın. Böyle bir durum. mql4'te yazdığım danışman/script/indikatör/başka bir şeyin grafik ile pencereye bağlı olmaması çok gerekli, programa bağlı olması gerekiyor. Hizmet gibi bir şey (MT5'ten), ancak buna MT4'te ihtiyacınız var.

Hizmetleri Kullan

 

ME'den Terminalin Sık Kullanılanlarına güncel kodu eklemek mümkün müdür?



Aslında, şu anda yazılmakta ve test edilmekte olan kodları ekleyebileceğiniz ayrı bir "Hata Ayıklama" sekmesine sahip olmak istiyorum.

Şimdi, uygun çalışma için, mevcut projelerle ilgili olmayan her şeyin olmadığı ayrı bir Terminal başlatmanız gerektiği ortaya çıktı.

O zaman hata ayıklama çok daha hızlıdır, çünkü. Terminalin kendisindeki diğer kodlardan dalgalanmaz.

 

Sevgili geliştiriciler. Lütfen gösterge arabelleklerinin otomatik olarak yeniden eşlenmesinin normal olup olmadığını açıklığa kavuşturun? Yeniden bölümleme ile şunu kastediyorum: maks. penceredeki çubuklar, örneğin 5000. Boyut 6439 olduğunda arabellek boyutu + oranlar_toplam 5000'e sıfırlanır. Maks. penceredeki çubuklar = 10000. Sıfırlama 11439'da gerçekleşir.

Bu nedenle, göstergeler çökebilir ve yanlış veriler gösterebilir.

Yapı 2085. Bu davranışı 2000'lerin yapılarından bir yerde fark ettim.

 
Alexey Kozitsyn :

Sevgili geliştiriciler. Lütfen gösterge arabelleklerinin otomatik olarak yeniden eşlenmesinin normal olup olmadığını açıklığa kavuşturun? Yeniden bölümleme ile şunu kastediyorum: maks. penceredeki çubuklar, örneğin 5000. Boyut 6439 olduğunda arabellek boyutu + oranlar_toplam 5000'e sıfırlanır. Maks. penceredeki çubuklar = 10000. Sıfırlama 11439'da gerçekleşir.

Bu nedenle, göstergeler çökebilir ve yanlış veriler gösterebilir.

Yapı 2085. Bu davranışı 2000'lerin yapılarından bir yerde fark ettim.

İlk beşte yer alan bu davranış aslen vardı.

Arabellek yeniden tahsisi nedeniyle bir gösterge çökmesine örnek verin

 
Slava :

İlk beşte yer alan bu davranış aslen vardı.

Arabellek yeniden tahsisi nedeniyle bir gösterge çökmesine örnek verin

Onlar. Normun üzerinde 1439 barlık bir birikim olduğunda, FORCED terminalinin arabelleklerin boyutunu maks. penceredeki çubuklar? EVET ise, bu durum belgelerde belirtilmelidir. Çünkü bu beklenmedik bir davranış.

Bir örnekle ilgili. Çubuk numaralarıyla çalışan özel geliştirmeleri kastediyorum. Onlar. 6438 numaralı çubuğu hatırladı ve 2 dakika sonra (TF M1) arabellekler yeniden dağıtıldı ve dizi sınırların ötesine geçti. Şimdi bunun "standart" bir davranış olduğu açıktır. Belgeleri güncelleyin lütfen.

 

Yürütme sırasında hata:

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

Sonuç : 1

Beklenen: 2 veya (C++'da olduğu gibi) - derleme hatası

 
Alexey Kozitsyn :

Belgeleri güncelleyin lütfen.

Belgeler nerede güncellenmelidir?

Bir çubuğun kesin tanımlayıcıları, her zaman çubuğun numarası değil, zamanı olmuştur.

Grafiğinizde birisi ChartSetSymbolPeriod olarak adlandırdıysa , çubuk sayısındaki değişikliği kolayca yakalayabilirsiniz. Sürpriz?

Bu arada, OnCalculate'de Rate_total gibi parametreler var.