Hatalar, hatalar, sorular - sayfa 786

 

vay, son yapıda bir şeyler berbattı. Göstergelerden birinin .ex5'i, daha önce derleme tarafından derlenen .ex5'e kıyasla boyut olarak neredeyse 10 kat büyüdü. Korkunç değil. Ancak gösterge atılırken bir hata oluştu (parametreleri girmeden önce bile):

 2012.07 . 27 02 : 53 : 57      MP2012_GRI (EURUSD,M30) Access violation read to 0x000000003FF39D25

Kodun 3/4'ünü zaten yorumladım. Ve eğer biraz daha yorum yapmazsam, şunu alıyorum (yukarıdaki hatayla birlikte):

2012.07.27 02:56:42     Custom Indicator        'MP2012_GRI' may work incorrectly, as it requires more than 256Kb of stack memory
ve gerçekten çalışmıyor

Kodu biraz yorumlarsam, ilk iki hata kaybolur, ancak gösterge boşaldığında şunu alıyorum:

 2012.07 . 27 02 : 47 : 35      MP2012_GRI (EURUSD,M30) 9 leaked strings left
(sayılar farklı olabilir - ne kadar kodun yorumlandığına bağlı olarak)

Daha önce, işlevimin hacminin çok büyük olduğunu öğrendim - onu küçük işlevlere dönüştüreceğim.

... ve son yapıda her şey yolundaydı

 
notused :

vay, son yapıda bir şeyler berbattı. Göstergelerden birinin .ex5'i, daha önce derleme tarafından derlenen .ex5'e kıyasla boyut olarak neredeyse 10 kat büyüdü. Korkunç değil. Ancak gösterge atılırken bir hata oluştu (parametreleri girmeden önce bile):

Kodun 3/4'ünü zaten yorumladım. Ve eğer biraz daha yorum yapmazsam, şunu alıyorum (yukarıdaki hatayla birlikte):

Güvenliği artırmak için korumalı alan ortamı üzerindeki denetimi sıkılaştırdık.

Yığın mesajı, programlamada ciddi bir sorun olan işlevlerden birinde 256 kilobayttan fazla yığın kullandığınızı söylüyor. Örneğin, C/C++'da, bir işlev tarafından yerel bir yığının kullanılması, hatta 16 kb bile olsa, ciddi bir uyarı olarak kabul edilir.

Büyük olasılıkla, işlevlerde çok sayıda statik dizi tahsis ediyorsunuz, örneğin:

 void func( void )
  {
   double arr1[ 128000 ];
   double arr2[ 128000 ];
   double arr3[ 128000 ];

  }

Bunu yapamazsın.

Büyük dizilere ihtiyacınız varsa, bunun yerine dinamik dizileri kullanın . Örneğin:

 double ExtArr[];

void func( void )
  {
   double arr1[];
   double arr2[];

   ArrayResize(ExtArr,128000,0);
   ArrayResize(arr1,128000,0);
   ArrayResize(arr2,128000,0);
  }
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Renat :

Güvenliği artırmak için korumalı alan ortamı üzerindeki denetimi sıkılaştırdık.

Yığın mesajı, programlamada ciddi bir sorun olan işlevlerden birinde 256 kilobayttan fazla yığın kullandığınızı söylüyor. Örneğin, C/C++'da, bir işlev tarafından yerel bir yığının kullanılması, hatta 16 kb bile olsa, ciddi bir uyarı olarak kabul edilir.

Büyük olasılıkla, işlevlerde çok sayıda statik dizi tahsis ediyorsunuz, örneğin:

Bunu yapamazsın.

Büyük dizilere ihtiyacınız varsa, bunun yerine dinamik dizileri kullanın . Örneğin:

Bu göstergede statik dizileri hiç kullanmıyorum; int vb.den daha ağır fonksiyonlara hiçbir şey iletilmez. Ancak her türlü grafik fonksiyon aktif olarak kullanılır.

Örneğin,

   ObjectSetString ( 0 , stmp, OBJPROP_TEXT , "HB" );
   ObjectSetInteger ( 0 , stmp, OBJPROP_COLOR , hbColor);

Son satırı yorumlarsanız, her şey yolunda. Sorun şu ki, bu tür birçok arama var ve bu

 ObjectSetInteger ( 0 , stmp, OBJPROP_COLOR , hbColor);

diğerlerinden farklı değil - arka arkaya 20. veya 30.

Bana göre sorun hala fonksiyon kapsamında çünkü kodu yorumlamak sorunu ortadan kaldırıyor ve kodun çoğu ObjectSetXXX'den oluşuyor. Deneysel olarak, daha küçük parçalara ayırmanın da faydasız olduğunu öğrendim - agresif bir inliner hala her şeyi bir yığın halinde toplar ve hatalar verir. Daha fazla kod almayı deneyebilirsiniz, ancak yarın. Daha önce çözemezsek yarın da servis masasına.

 
notused :

Bu göstergede statik dizileri hiç kullanmıyorum; int vb.den daha ağır fonksiyonlara hiçbir şey iletilmez. Ancak her türlü grafik fonksiyon aktif olarak kullanılır.

Ama çok büyük bir şey var.

Örneğin, üyelerinde yalnızca bir ton statik diziye sahip bir sınıfın yerel bir kopyasını içeriyorlardı. Genellikle yerel yığının tüketicilerinin gizli mevduatları vardır.


Örneğin,

Son satırı yorumlarsanız, her şey yolunda. Sorun şu ki, bu tür birçok arama var ve bu

diğerlerinden farklı değil - arka arkaya 20. veya 30.

Bana göre sorun hala fonksiyon kapsamında çünkü kodu yorumlamak sorunu ortadan kaldırıyor ve kodun çoğu ObjectSetXXX'den oluşuyor. Deneysel olarak, daha küçük parçalara ayırmanın da faydasız olduğunu öğrendim - agresif bir inliner hala her şeyi bir yığın halinde toplar ve hatalar verir. Daha fazla kod almayı deneyebilirsiniz, ancak yarın. Daha önce çözemezsek yarın da servis masasına.

Fonksiyonları bölün, sınıflara koyun.

Inliner'ın büyük olasılıkla bununla hiçbir ilgisi yoktur - çok büyük kod parçaları eklemez. Daha da fazlası, eğer ağır/çok sayıda yerel değişkene sahiplerse.

 
Renat :

Ama çok büyük bir şey var.

Örneğin, üyelerinde yalnızca bir ton statik diziye sahip bir sınıfın yerel bir kopyasını içeriyorlardı. Genellikle yerel yığının tüketicilerinin gizli mevduatları vardır.


Fonksiyonları bölün, sınıflara koyun.

Inliner'ın büyük olasılıkla bununla hiçbir ilgisi yoktur - çok büyük kod parçaları eklemez. Daha da fazlası, eğer ağır/çok sayıda yerel değişkene sahiplerse.

Servis Masası #444495
 

nedenmiş ? beceriksiz ödemeler veya nasıl! sadece 1 temsilci 1 kr kazandı ve günde 0,3 kr ödedi


 

Servis masasına şu başlıklarla yazılması zorunludur:

Terminalin sürümü ve bitliği

...

problemin tanımı

...

sıralama

...

Sonuç

...

Beklenen Sonuç

...

ek bilgi

...

Yoksa her şey kendi sözlerinle mi?

 
Zeleniy :

Yoksa her şey kendi sözlerinle mi?

Listede daha iyi. Böcekle uğraşacak olanın hayatını büyük ölçüde kolaylaştıracaksınız.
 
Zeleniy :

Servis masasına şu başlıklarla yazılması zorunludur:


Yoksa her şey kendi sözlerinle mi?

hepsini yapabilirsin ama

Terminalin sürümü ve bitliği
problemin tanımı

sıralama

Sonuç

Beklenen Sonuç

mutlaka.

------------

Ücretsiz bir konu hakkında bir makale yazmıyorsunuz, ancak geliştirici için hızlı ve ek açıklamalar olmadan ondan ne istediğinizi tatması gereken bir metin yazıyorsunuz.

 
sergeev :

hepsini yapabilirsin ama

Terminalin sürümü ve bitliği
problemin tanımı

sıralama

Sonuç

Beklenen Sonuç

mutlaka.

------------

Ücretsiz bir konu hakkında bir makale yazmıyorsunuz, ancak geliştirici için hızlı ve ek açıklamalar olmadan ondan ne istediğinizi tatması gereken bir metin yazıyorsunuz.

mql5.com Site bölümünü seçtim ve teklif burada ve onu başlıklara nasıl ekleyeceğimi anlamıyorum.