MT5'te dizilerin zorla temizlenmesi?

 

MT5 ile hiç ciddi bir şekilde çalışmadım ve şimdi ona bir kerede büyük bir proje aktarıyorum. Doğal olarak, biri dizinin sürekli taşması olan zorluklar ortaya çıkar. MT4'te, dizilerin bildirimden sonra özel olarak temizlenmesi gerekmediği için ortaya çıktığı gibi, böyle bir sorun yoktu. Ve MT5'te gereklidir. Benim teknolojim, çekirdeğin yeniden boyutlandırılmasıyla birlikte kademeli olarak doldurulmasını gerektiriyor. Bazı dizilerin tam boyutu önceden bilinmemektedir. Aynı zamanda, doldurma sürecinde diziler arasında çok sayıda döngü olması nedeniyle, bir taşma söz konusudur. Hücrelerde çöp olmasaydı, her şey uzun zaman önce çalışırdı.

Yani bir yanda dizilerdeki çöp, diğer yanda sınırların dışına çıkarken kritik bir hata. Düz, acımasız koşullar ...

MT4'te olduğu gibi, bildirilen değişkenleri sıfıra getirmenin yanı sıra dizilerin otomatik temizliğini kaldırmanın neden gerekli olduğunu anlamak istiyorum?

Değişkenlere hala katlanabiliyorsanız, o zaman büyük dizilerde sürekli olarak çöp sorunlarıyla karşılaşırsınız ve bağımsız olarak yalnızca bildirirken değil, aynı zamanda yeniden boyutlandırırken de temizliklerini halledersiniz ... Neden?

 

Taşmanın nedeni, dizilerin kademeli olarak farklı fonksiyonlarda değerlerle doldurulması ve bu süreçte bir hücreye diğer hücre üzerinden ulaşılmasıdır. Bazı işlevler iki kez çağrılır ve diziyi sırayla doldurur . Ancak hücrelerde çöp varsa, ilk dolumda bir taşma olur.

Muhtemelen diziler önceden temizlenerek sorun çözülebilir ama tabii bu da ek bir baş ağrısıdır. Çok yazık.

 
Tamam, şikayet etmeyelim. )) Sadece alışmanız gerekiyor.))
 

Alışmak.

Her zaman bir dizi bildiririm , beklenen boyutu belirlerim, değerlerle doldururum (başlat). Başlatma genellikle sıfırdan daha iyidir - bu şekilde bir hata bulmak daha kolaydır.

 
Peter, ne demek istediğini anlamıyorum?
Dinamik bir dizi var, bu dizinin mevcut boyutu var, bir taşma kontrolü var.
Şahsen ben taşma kontrolünden uzaklaşmaya çalışıyorum ve sadece geliştirme aşamasında kullanıyorum çünkü. Algoritma hatasız okuryazarsa, taşma oluşmaz. Neden ek kontroller?
Taşmalarınız varsa, kendinizde hatalar arayın. Size yardımcı olmak için kesme noktaları olan veya kesme noktaları olmayan bir hata ayıklayıcı, çünkü. taştığında program hata ayıklama modunda durur ve değişkenlere bakabilirsiniz.
Ve eğer çöp varsa, almadığın çöplerindir.
 
Реter Konow :

MT5 ile hiç ciddi bir şekilde çalışmadım ve şimdi ona bir kerede büyük bir proje aktarıyorum. Doğal olarak, biri dizinin sürekli taşması olan zorluklar ortaya çıkar. MT4'te, dizilerin bildirimden sonra özel olarak temizlenmesi gerekmediği için ortaya çıktığı gibi, böyle bir sorun yoktu. Ve MT5'te gereklidir. Benim teknolojim, çekirdeğin yeniden boyutlandırılmasıyla birlikte kademeli olarak doldurulmasını gerektiriyor. Bazı dizilerin tam boyutu önceden bilinmemektedir. Aynı zamanda, doldurma sürecinde diziler arasında çok sayıda döngü olması nedeniyle, bir taşma söz konusudur. Hücrelerde çöp olmasaydı, her şey uzun zaman önce çalışırdı.

Yani bir yanda dizilerdeki çöp, diğer yanda sınırların dışına çıkarken kritik bir hata. Düz, acımasız koşullar ...

MT4'te olduğu gibi, bildirilen değişkenleri sıfıra getirmenin yanı sıra dizilerin otomatik temizliğini kaldırmanın neden gerekli olduğunu anlamak istiyorum?

Değişkenlere hala katlanabiliyorsanız, o zaman büyük dizilerde sürekli olarak çöp sorunlarıyla karşılaşırsınız ve bağımsız olarak yalnızca bildirirken değil, aynı zamanda yeniden boyutlandırırken de temizliklerini halledersiniz ... Neden?

Ben de ilk başta aynı sorunla karşılaştım.

Bence diziler belirli bir şekilde dolduruluyor, döngülerde frekansta bu dikkate alınmalıdır.

 
Nikolai Semko :
Peter, ne demek istediğini anlamıyorum?

hepsi aynı https://www.mql5.com/ru/forum/293630/page179#comment_10802823

şimdi suçlu MQL5... ;)

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2019.02.28
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu :

hepsi aynı https://www.mql5.com/ru/forum/293630/page179#comment_10802823

şimdi suçlu MQL5... ;)

İyi evet. Bir şekilde MQL4'e alıştım.
Gerçekten, taşmaları kontrol etmeye gerek yok mu? Ama bu korkunç. Hatalar nasıl yakalanır?
 
Nikolai Semko :
İyi evet. Bir şekilde MQL4'e alıştım.
Gerçekten, taşmaları kontrol etmeye gerek yok mu? Ama bu korkunç. Hatalar nasıl yakalanır?

Nikolay, MQL4 için endişelenme, orada her şey yolunda. Topikstarter dizileri rastgele doldurur . Herşey.

 
Nikolai Semko :
İyi evet. Bir şekilde MQL4'e alıştım.
Gerçekten, taşmaları kontrol etmeye gerek yok mu? Ama bu korkunç. Hatalar nasıl yakalanır?

Tabii ki gerekli.

Kendine ve programlarına saygı duyan herhangi bir programcı, her şeyin yoluna girmesine izin vermez. MQL4'te #property strict kullanmazsanız, o zaman dizin 20'de 10 boyutunda bir diziye başvurabilirsiniz. Ve hiçbir şey olmayacak - program çalışmaya devam edecek, ancak programcı orada NE alacak ve kullanacak - yatıyor omuzlarında. Akıllıysa, kesinlikle dizi dışında değerler almamak için her şeyi kontrol edecek ve kontrol edecektir, ancak eğer bir "gaf" ise, o zaman böyle bir kontrolle uğraşmaz ve "ana şey" işe yarıyor mu, ama nasıl - peki, nasıl - bir iş parçacığı...".
Çoğunlukla, uluyanlar - hiçbir şeyle uğraşmayan ve şimdi "kötü, kötü ve karmaşık MQL5" i suçlayanlar sadece bu tür kullanıcılardı, çünkü eskisi gibi el sanatlarıyla uğraşmalarına izin vermiyor. Ancak başlangıçta alınan verilerin kontrolleri ve kontrolü ile kodu düşünen ve yapanlar, dillerin karmaşıklığında herhangi bir fark görmediler ve şimdi kafaları karıştı - "karmaşıklık nerede - her şey aynı ..."

 
Реter Konow :

MT5 ile hiç ciddi bir şekilde çalışmadım ve şimdi ona bir kerede büyük bir proje aktarıyorum.

Yeniden yazarken dizilerde ciddi fark

Çok boyutlu diziler için ArrayResize'ın özellikleri

 void OnStart ()
{
   int Array[][ 2 ];
  
   Print ( ArrayResize (Array, 7 )); // MQL5 - 7, MQL4 - 14
   Print ( ArraySize (Array));       // 14
}