Hatalar, hatalar, sorular - sayfa 2243
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
mql4 göstergesindeki kod çalışmayı durdurdu. nasıl düzeltilir?
Düzenleyici 'ObjectSetInteger' yazar - aşırı yüklemelerden hiçbiri işlev çağrısına uygulanamaz
Kaç yıl çalıştı ve aniden durdu. Yazık ama.
Ama neden iki stili karıştırdın? Ok kodunu tanımlamak için ilk satırı kullanırsanız, ikinci satırı aynı tarzda kullanın:
Göstergenin yeni bir sürümünü piyasaya yüklemeye çalıştım. Testler hatalarla sona erdi. Aşağıdaki içeriğe sahip uygulamada gösterildiği gibi hata raporu:
Belki de sorun test cihazındadır?Ama neden iki stili karıştırdın? Ok kodunu tanımlamak için ilk satırı kullanırsanız, ikinci satırı aynı tarzda kullanın:
Teşekkürler, yardımcı oldu.
2 stil? Stilleri bilmiyordum. Daha önce bu bölümü ancak bu şekilde yapmak mümkündü. Değişiklikler gerçekleşti. 10 yılı aşkın bir süredir MQL4'te programlama yapıyorum. Ve şimdi geliştiriciler dili değiştirdi ve kodlarımın çoğu çalışmayı durdurdu. çok hayal kırıklığına uğradım Daha iyisi için olmayan değişiklikler oldu. Bu, şimdi bir sürü kodu yeniden yapmam gerektiği anlamına geliyor. Eski olmalarına rağmen bütün bir vagon için kullanışlıydılar.
Göstergenin yeni bir sürümünü piyasaya yüklemeye çalıştım. Testler hatalarla sona erdi. Aşağıdaki içeriğe sahip uygulamada gösterildiği gibi hata raporu:
Test cihazıyla ilgili bir sorun olabilir mi?Lütfen servis masasına bir talep oluşturun, biz hallederiz
UPD: Başvurunuzu buldum.
Herhangi bir dinamik dizinin arabelleğini serbest bırakır ve boş boyutun boyutunu 0 olarak ayarlar.
Komut dosyaları ve göstergeler yazarken, ArrayFree() işlevini kullanma ihtiyacı genellikle ortaya çıkmayabilir: komut dosyası sona erdiğinde, kullanılan tüm bellek hemen serbest bırakılır ve özel göstergelerde, dizilerle yapılan ana çalışma, gösterge arabelleklerine erişimdir, boyutları, yürütme terminali alt sistemi tarafından otomatik olarak kontrol edilir.
Programın karmaşık dinamik koşullarda belleği bağımsız olarak yönetmesi gerekiyorsa , ArrayFree() işlevi, zaten gereksiz olan bir dinamik dizi tarafından işgal edilen belleği açıkça ve hemen serbest bırakmanıza olanak tanır.
Anlıyor musun? Gereksiz.
Doğal olarak, bellek ondan serbest bırakıldığından ve ardından dizinin boyutunu ayarlayarak yeniden tahsis ettiğinizden, kimse size içeriğini garanti etmez.
Dizi başlatmayı kullanın: ArrayInitialize()
Ne demek kimse içeriği garanti etmez? Hafıza serbest bırakıldıysa, artık orada değil, o zaman içindeki çöp ne tarafta? Yoksa belleği temizlemek, programın başka bir bölümünün bu belleği kullanmasına izin vermek ve aslında onu hiç temizlememek anlamına mı geliyor?
Ne demek kimse içeriği garanti etmez? Hafıza serbest bırakıldıysa, artık orada değil, o zaman içindeki çöp ne tarafta? Yoksa belleği temizlemek, programın başka bir bölümünün bu belleği kullanmasına izin vermek ve aslında onu hiç temizlememek anlamına mı geliyor?
ArrayResize belleği temizlemez, bu nedenle önceki "tüketiciden" gelen çöpleri içerir.
Bu hız için yapılır, çünkü. bir diziye bellek ayırdıktan sonra, %99,99(9) vakada kullanıcı onu kendi verileriyle "doldurur".
Teşekkürler, yardımcı oldu.
2 stil? Stilleri bilmiyordum. Daha önce bu bölümü ancak bu şekilde yapmak mümkündü. Değişiklikler gerçekleşti. 10 yılı aşkın bir süredir MQL4'te programlama yapıyorum. Ve şimdi geliştiriciler dili değiştirdi ve kodlarımın çoğu çalışmayı durdurdu. çok hayal kırıklığına uğradım Daha iyisi için olmayan değişiklikler oldu. Bu, şimdi bir sürü kodu yeniden yapmam gerektiği anlamına geliyor. Eski olmalarına rağmen bütün bir vagon için kullanışlıydılar.
Ok kodu, mql4 ObjectSetXXX işlevlerinin tanıtılmasından önce bu şekilde ayarlanmadı mı?
Yaklaşık 10 yıldır mql ile yazıyorum (belki daha fazla - zaman nasıl geçiyor...) - Tamamen dörtlü fonksiyonları şimdiden unutmaya başladım - Mümkünse çok platformlu kod yazıyorum.
ArrayResize belleği temizlemez, bu nedenle önceki "tüketiciden" gelen çöpleri içerir.
Bu hız için yapılır, çünkü. bir diziye bellek ayırdıktan sonra, %99,99(9) vakada kullanıcı onu kendi verileriyle "doldurur".
O zaman neden terminali yeniden başlattıktan sonra bile "çöp" dijital değerleri sabit?
Şahsen, başka bir dizideki hücrelerin içeriğinin basit bir toplamından bıktım ve uzun bir süre sorunun ne olduğunu şaşırdım.
O zaman neden terminali yeniden başlattıktan sonra bile "çöp" dijital değerleri sabit?
Şahsen, başka bir dizideki hücrelerin içeriğinin basit bir toplamından bıktım ve uzun bir süre sorunun ne olduğunu şaşırdım.
Başlatılmamış bir dizide ne tür verilerin bulunduğu önemli değil, veriler her an değişebilir, hiç kimse değerini garanti etmez.
Bu nedenle, başlatılmamış değişkenlerin kullanılması (hafıza okuma) bazen nedenin uzun süre arandığı durumlara yol açar:
Ben sadece tavsiye verebilirim.
Gelecekte başlatma eksikliğiyle ilgili hataları aramak için çok zaman harcamamak için verileri her zaman başlatma alışkanlığını geliştirmek gerekir.
Ne demek kimse içeriği garanti etmez? Hafıza serbest bırakıldıysa, artık orada değil , o zaman içindeki çöp ne tarafta? Yoksa belleği temizlemek, programın başka bir bölümünün bu belleği kullanmasına izin vermek ve aslında onu hiç temizlememek anlamına mı geliyor?
"hayır" ne anlama geliyor? Hiç kimse bellek çubuğunu anakarttaki yuvadan çıkarmaz. Ve bellek mevcut olduğundan ve serbest bırakıldığından (bir değerle başlatılmadığından, yani serbest bırakıldığından), programın diğer ihtiyaçları için kullanılmaya başlar.