intOnInit()
{
//----------------------------------------------------------------------------////Processing process of the initialization//----------------------------------------------------------------------------//return(0);
//----------------------------------------------------------------------------//
}
"無効なポインタへのアクセス" =="無効なポインタへのアクセスを試みている"?はい」の場合
次のような場合、ポインタは無効と なることがあります。
1件目は私の場合です。
CheckPointer()などのチェックメソッドが使えれば嬉しいのですが(朝飯前)、チャートからEAを引き裂くのは、私には無理です。
つまり、コンストラクタでポインタをNULL に指定し、そのポインタを使ったアクションを停止すると、Expert Advisor は 281 を取得して終了します(私の考えによれば、終了しないはずなのですが)。
しかし、コンストラクタの後にInitまたはInitXXXを 呼び出すと(CExpertと 同様) 、すべてが適切に動作します...
最初の選択肢は、私の場合です。
CheckPointer() などのチェックメソッドが使えれば嬉しいのですが(同じ日に生まれたので)、チャートからEAをクラッシュさ せると、その機会がありません。
もし私がコンストラクタでポインタがNULL と等しいことを指定し、それで可能なすべての動作を中断すると、EA は 281 を取得して終了します(そして私の考えによれば、そうすべきではない)。
しかし、コンストラクタ(CExpertと同様) の後にInit または InitXXX を呼び出すと、すべてが正しく動作します...。
例外処理をしていれば、何が問題なのかを簡単に把握し、解決することができたのです。
最初の選択肢は、私の場合です。
CheckPointer()などのチェックメソッドが使えれば嬉しいのですが(昨日にない生まれだと思います)、チャートからEAを引き裂くのは私にチャンスを与えてくれないのです。
つまり、コンストラクタでポインタをNULL に指定し、そのポインタを使ったアクションを停止すると、Expert Advisor は 281 を取得して終了します(私の考えによれば、終了しないはずなのですが)。
コンストラクタ(CExpertと同様)の後にInitまたはInitXXXを 呼び出すと、 、すべてが正常に動作するようになります...。
InitやInitXXXメソッドはまだ扱っていませんが、「EAが引き下げられる」こと自体は、「実行 時のプログラムが不正なポインタにぶつかり、このボトルネックをコードの中から探さなければならない」と解釈しています。私のコンストラクタもポインタをNULLに初期化しますが、何も飛んできません。
質問の意味が違っていたら、ごめんなさい。
ありがとうございます。これですべてのものが定位置に収まりました。エラー281が 発生したが、EAがアンロードされないことが望ましいとする。どのように扱えばいいのでしょうか?
初期化のすべてのステップの後にエラー 281 が発生したが、Expert Advisor の主要な作業に致命的な影響を与えず、まったく実行しない場合はどうすればよいですか。
例外処理は行わない。
解決策はただ一つ、不正なポインタを使用しないことです。
ポインタが正しくない可能性がある場合(ゼロではない)、使用前に必ず確認してください。
例外処理は行わない。
唯一の解決策は、無効なポインタを使用しないことです。
ポインタが不正確である可能性が(ゼロではない)場合、使用前に必ずテストしてください。
ポインタが無効である可能性は(ゼロ以外では)常にあります
そのため、使用する前に必ず有効性を確認する必要があります。天地創造後だけでなく
常にではありませんが、重要なポイントではそうしています :(
あなたの推薦を使うと、なんと純粋な透明コードが :) 化けるのでしょう。
InitやInitXXXメソッドはまだ扱っていませんが、「EAをチャートから外す」こと自体は、「実行 中のプログラムが不正なポインタにぶつかり、まさにこのボトルネックをコードの中から探さなければならない」と解釈します。私のコンストラクタもポインタをNULLに初期化しますが、何も飛んできません。
質問を誤解していたのなら、ごめんなさい。
ポインタが無効である可能性は常にあります(ゼロではありません)。
そのため、使用する前に必ず有効性を確認する必要があります。
常にではありませんが、重要な分野ではそうしています :(
あなたの推薦を使用すると、純粋な透明なコードがなんと :) 変わってしまうのでしょう。
代替案: 無効なポインターで飛んでしまう、クリーンで透明なコードをお持ちですか?
代替案:クリーンで透明性のあるコードを持つ。
無効なポインタと他の例外的な状況(電源障害、ディスク容量、など排他的な状況)で、プログラムは例外処理ブロックに移動し、尊敬される興味深い(そして私も:)変数値とエラーを表示し、状況を分析し、問題が何であるかを理解することができました。そして、このブロックで起こったことに反応がなければ、ドロップアウトする。
もちろん、標準的で必要なチェックが無効になるわけではありません。これは、例外的な状況においてのみ適用されます。
CExpertクラスであれば、少なくともInit(...)を呼び出す必要があります。そこにあるすべてのポインターは、基底クラスのオブジェクトへのポインターとして初期化されます...
例えば、InitやInitXXXがエラー(falseを返す)で実行された場合、その後どうなるのでしょうか?
また、実行時にEAが281を受信しているにもかかわらず、周りにトレーダーがいない場合はどうしたらよいでしょうか。
例外処理をしていれば、何が問題なのかを簡単に把握し、対処することができたのです。
チェックはほぼ全工程で行っているのですが、残念ながら処理が追いつきません...。
追記
そこで、EAがチャートから脱落することについてですが、どのような初期化でもEAを「生かす」ためには、どうしたらよいのでしょうか?
代替案: 無効なポインタによってクラッシュする、きれいで透明なコードを持つには?
まあ、それはそれで、専門家を引きずり下ろすかどうかは、この際「私」自身に判断させなさいということで飛んでいくわけです。
結局のところ、「壊れた」ポインタがどこかに適用されるという話でもないのですが、個人的には適用前のチェックはしています(タイマで別のチェックを実装することは可能ですが)。
指標とはどうにか共存できるようになったし、初期化の結果もあまり気にならないのだが、ポインタとは友達になれない。
InitやInitXXXメソッドはまだ扱っていませんが、「EAダンピング」を解釈すると、実行 時にプログラムが不正なポインタにぶつかり、このボトルネックをコード内で探さなければならない、ということです。私のコンストラクタもポインタをNULLに初期化しますが、何も飛んできません。
もし私が質問を誤解していたのなら、申し訳ありません。
現在、問題を解決するために、私は初期化ブロックで0を返しています。
私の理解では、それが私にとって最良の方法です(EAが初期化時にクラッシュしないように)。I.e.どのような場合でも結果OnInit = 0 であれば、どの程度正しいのか判断できない。