OOP. Başvuru soruları - sayfa 14

 
Yedelkin :

" Geçersiz işaretçi erişimi " == " Geçersiz bir işaretçiye erişim girişiminde bulunuldu"? Evet ise, o zaman

İşaretçi aşağıdaki durumlarda geçersiz olabilir:

  • işaretçi NULL ;
  • nesne silme operatörü kullanılarak yok edildiyse.

İlk seçenek benim durumum.

seve seve kullanırdım CheckPointer() ve diğer kontrol yöntemleri (dün doğduğu gibi değil), ancak Expert Advisor'ı grafikten çıkarmak bana bunun için bir şans vermiyor.

Açıklığa kavuşturacağım - yapıcıda işaretçinin eşit olduğunu belirtmeye değer NULL ve aynı zamanda onunla tüm eylemleri durdurun, EA 281 alır ve çöker (ama benim fikrime göre olmamalıdır).

Yapıcıdan sonra Init veya InitXXX'i çağırın ( CExpert'e benzer) her şey olması gerektiği gibi çalışıyor...

 
Interesting :

İlk seçenek benim durumum.

CheckPointer() ve diğer kontrol yöntemlerini memnuniyetle kullanırdım (dün doğduğu gibi değil), ancak Expert Advisor'ı grafikten çıkarmak bana bir şans vermiyor .

Açıklığa kavuşturacağım - yapıcıda işaretçinin eşit olduğunu belirtmeye değer NULL ve aynı zamanda onunla tüm eylemleri durdurun, EA 281 alır ve çöker (ama benim fikrime göre olmamalıdır).

Yapıcıdan sonra Init veya InitXXX'i çağırın (CExpert'e benzer) her şey olması gerektiği gibi çalışıyor...


Ve istisna işleme olurdu - sorunun ne olduğunu çok kolay anlayabilir ve durumu çözebilirsiniz.
 
Interesting :

İlk seçenek benim durumum.

seve seve kullanırdım CheckPointer() ve diğer kontrol yöntemleri (dün doğduğu gibi değil), ancak Expert Advisor'ı grafikten çıkarmak bana bunun için bir şans vermiyor.

Açıklığa kavuşturacağım - yapıcıda işaretçinin eşit olduğunu belirtmeye değer NULL ve aynı zamanda onunla tüm eylemleri durdurun, EA 281 alır ve çöker (ama benim fikrime göre olmamalıdır).

Yapıcıdan sonra Init veya InitXXX'i çağırın (CExpert'e benzer) her şey olması gerektiği gibi çalışıyor...

Henüz Init veya InitXXX yöntemleriyle ilgilenmedim, ancak kendi başına "Çizelgeden bir Uzman Danışmanın yıkılmasını" şu şekilde yorumlayabilirim: program yürütülürken yanlış bir işaretçiye rastlar ve bunun aranması gerekir. koddaki darboğaz. Yapıcım ayrıca işaretçiyi NULL olarak başlatıyor, ancak hiçbir şey kilitlenmiyor.

Soruyu yanlış anladıysam özür dilerim.

 
Interesting :

Teşekkürler, şimdi her şey yerli yerinde. Ancak, ek bir soru daha var - Diyelim ki 281 hatası oluşursa , ancak danışmanın boşaltılmaması istenir. O zaman nasıl olunur?

Soruyu açıklığa kavuşturmama izin verin - Tüm başlatma adımları tamamlandıktan sonra 281. hata meydana gelirse, ancak bu, Uzman Danışmanın ana çalışmasını hiç başlatılmayacak kadar kritik bir şekilde etkilemiyorsa?

İstisna işleme olmayacak.

Tek bir çıkış yolu var - yanlış işaretçiler kullanmayın.

İşaretçinin geçersiz olma olasılığı sıfır değilse, kullanmadan önce kontrol ettiğinizden emin olun.

 
uncleVic :

İstisna işleme olmayacak.

Tek bir çıkış yolu var - yanlış işaretçiler kullanmayın.

İşaretçinin geçersiz olma olasılığı sıfır değilse, kullanmadan önce kontrol ettiğinizden emin olun.


KESİNLİKLE HER ZAMAN işaretçinin yanlış olma olasılığı (sıfır dışında) vardır!

Bu nedenle, HER kullanımdan önce her zaman geçerliliğini kontrol etmelisiniz! Ve sadece yaratıldıktan sonra değil.

Her zaman değil ama kritik alanlarda yapıyorum :(


Tavsiyenizi kullanırken temiz şeffaf kodun ne hale geldiğini siktir edin :).

 
Yedelkin :

Henüz Init veya InitXXX yöntemleriyle ilgilenmedim, ancak kendi başına "Çizelgeden bir Uzman Danışmanın yıkılmasını" şu şekilde yorumlayabilirim: program yürütülürken yanlış bir işaretçiye rastlar ve bunun aranması gerekir. koddaki darboğaz. Yapıcım ayrıca işaretçiyi NULL olarak başlatıyor, ancak hiçbir şey kilitlenmiyor.

Soruyu yanlış anladıysam özür dilerim.

CExpert sınıfından bahsediyorsak, en azından Init(...) çağırmaya değer. Orada tüm işaretçiler, temel sınıf nesnelerine işaretçiler olarak başlatılır.
 
falkov :

KESİNLİKLE HER ZAMAN işaretçinin yanlış olma olasılığı (sıfır dışında) vardır!

Bu nedenle, HER kullanımdan önce her zaman geçerliliğini kontrol etmelisiniz!

Her zaman değil ama kritik alanlarda yapıyorum :(


Tavsiyenizi kullanırken temiz şeffaf kodun ne hale geldiğini siktir edin :).

Alternatif: Geçersiz işaretçide temiz şeffaf kod kilitleniyor mu?
 
uncleVic :
Alternatif: Geçersiz işaretçide temiz şeffaf kod kilitleniyor mu?

Alternatif: Temiz, şeffaf bir koda sahip olun.

Geçersiz işaretçi ve diğer istisnai durumlar (güç kapalı, disk alanı vb. İSTİSNAİ durumlar) için program, sevgili İlginç'in (ve ben de :) değişkenlerin değerlerini yazdırabildiği istisna işleme bloğuna gider ve Hata, durumu analiz edin ve sorunun ne olduğunu anlayın. Ve bu blokta olanlara bir tepki yoksa, düş.

Doğal olarak bu, standart ve gerekli kontrolleri iptal etmez. SADECE İSTİSNAİ DURUMLAR

 
uncleVic :
CExpert sınıfından bahsediyorsak en azından Init(...) olarak adlandırmaya değer. Orada tüm işaretçiler, temel sınıf nesnelerine işaretçiler olarak başlatılır.

Diyelim ki Init veya InitXXX başarısız olursa (yanlış döndürür), o zaman ne olacak?

Ya da yürütme sırasında uzman bile (tüm kontroller ve sıkıntılarla birlikte) 281 alırsa ve tüccar etrafta değilse ne yapmalı?

falkov :

Ve istisna işleme olurdu - sorunun ne olduğunu çok kolay anlayabilir ve durumu çözebilirsiniz.

Eh, hiçbiri yok, bu yüzden gerekli işleme. hemen hemen her adımda kontroller var ama ne yazık ki işlem yok...

not

Peki Expert Advisor'ın çizelgeden ayrılması hakkında - Expert Advisor'ın başlatma sırasında herhangi bir derlemede "canlı" kalmasını sağlamak için ne yapılmalıdır?

 
uncleVic :
Alternatif: Geçersiz işaretçide temiz şeffaf kod kilitleniyor mu?

Yani işin gerçeği şu ki, yola çıkan, bu durumda bilirkişiyi yıkmanın gerekli olup olmadığına "ben" kendim karar vereyim.

Sonuçta, "kırık" işaretçinin bir yerde kullanıldığı gerçeğinden bahsetmiyoruz bile, ancak kullanmadan önce kişisel olarak bir kontrolüm var (yine de zamanlayıcıda bir kontrol uygulayabiliyorum).

Bir şekilde göstergelerle uyum içinde yaşamayı öğrendim ve başlatma sürecinde ENGELLİ lakabının sonucu bir şekilde beni gerçekten rahatsız etmiyor, ancak bu şekilde pointer'larla arkadaş olmak imkansız.

Yedelkin :

Henüz Init veya InitXXX yöntemleriyle ilgilenmedim, ancak kendi başına "Çizelgeden bir Uzman Danışmanın yıkılmasını" şu şekilde yorumlayabilirim: program yürütülürken yanlış bir işaretçiye rastlar ve bunun aranması gerekir. koddaki darboğaz. Yapıcım ayrıca işaretçiyi NULL olarak başlatıyor, ancak hiçbir şey kilitlenmiyor.

Soruyu yanlış anladıysam özür dilerim.

Eldeki görevi uygulamak için, başlatma bloğunda aptalca 0 döndürüyorum.

 int OnInit ()
{
//----------------------------------------------------------------------------//

//Processing process of the initialization

//----------------------------------------------------------------------------//
return ( 0 );
//----------------------------------------------------------------------------//
}

Anladığım kadarıyla bu benim için en iyi çıkış yolu (böylece Uzman Danışman başlatma sırasında çökmez). Onlar. Her durumda, OnInit = 0 sonucunun bunun ne kadar doğru olduğuna karar veremiyorum.