mql4でスタックオーバーフローエラーが発生する原因は何ですか?

 

mql4でコンパイル中にスタックオーバーフローエラーが発生する原因は何ですか?オブジェクトを作成 するための関数を使用しているのではないかと考えています。以下は、オブジェクトを作成するために100回以上呼び出された関数です。

int ObCreate(string ObName,double Xdist,double Ydist,double Zoom)
 {
 
   ObjectCreate(ObName, OBJ_LABEL, 0, 0, 0);  // Creating obj.
   ObjectSet(ObName, OBJPROP_CORNER, 0);    // Reference corner
   ObjectSet(ObName, OBJPROP_XDISTANCE, Xdist*ZoomTimes);// X coordinate   
   ObjectSet(ObName, OBJPROP_YDISTANCE, ZoomTimes*Ydist);// Y coordinate
 return(0);
 }

以下は使用例です。

   ObCreate("EURUSD",Column1x,15,ZoomTimes);

同じ数のオブジェクトを通常の方法で作成してもこのエラーは出ませんでしたが、残りのオブジェクトを作成するためにこの関数を導入して使用すると、エラーが発生しました。以下のサンプルでは、オブジェクトの数が多いにもかかわらず、エラーが発生しません。

   ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);  // Creating obj.
   ObjectSet("EURUSD", OBJPROP_CORNER, 0);    // Reference corner
   ObjectSet("EURUSD", OBJPROP_XDISTANCE, Column1x*ZoomTimes);// X coordinate   
   ObjectSet("EURUSD", OBJPROP_YDISTANCE, ZoomTimes*15);// Y coordinate
 
tonny:

mql4でスタックオーバーフローエラーが発生する原因は何ですか?オブジェクトを作成するための関数を使用していると思われます。以下は、オブジェクトを作成するために100回以上呼び出された関数です。

以下は使用例です。

同じ数のオブジェクトを通常の方法で作成したところ、このエラーは発生しませんでしたが、残りのオブジェクトを作成するためにこの関数を導入して使用したところ、エラーが表示されるようになりました。以下のサンプルでは、オブジェクトの数が多いにもかかわらず、エラーが発生しません。

私が読んだ限りでは、スタックオーバーフローはしばしば再帰によって引き起こされますが、あなたが投稿したコードにはそれが見られません ... なぜ関数の型がint なのですか? 使わないのに変数double zoomを渡す意味があるのでしょうか?

もう一つ、OBJPROP_XDISTANCEとOBJPROP_YDISTANCEの 値はdoubleではなく int であるべきです。
 
RaptorUK:
私はスタックオーバーフローを起こしたことがありません、私が読んだところでは、それらはしばしば再帰によって引き起こされますが、あなたが投稿したコードにはそれが見られません... なぜあなたの関数のタイプはint ですか? それを使用しないときに変数double zoomを渡すことに何の意味がありますか?

もう一つ、OBJPROP_XDISTANCEとOBJPROP_YDISTANCEの 値はdoubleではなく int であるべきです。


これが私を当惑させています。

RaptorUK です。
私が読んだ限りでは、スタックオーバーフローはしばしば再帰によって引き起こされますが、あなたが投稿したコードにはそれが見られません ... なぜ関数の型はint なのですか? 使わないのに変数double zoomを渡す意味は あるのですか?

もう一つ、OBJPROP_XDISTANCEとOBJPROP_YDISTANCEの 値はdoubleではなく int であるべきです。

私はいくつかの検索と置換を行い、私はまだインジケータの下部を修正することはできません。

RaptorUK です。
私が読んだ限りでは、スタックオーバーフローはしばしば再帰によって引き起こされますが、あなたが投稿したコードにはそれが見られません ... なぜ関数の型がint なのですか? 使わないのに変数double zoomを渡す意味があるのでしょうか?

もう一つ、OBJPROP_XDISTANCEとOBJPROP_YDISTANCEの 値はdoubleではなく int であるべきです。

ObjectSet() の本をもっと読んでください。私は助けることができます待ってください。以下はその抜粋です。

bool ObjectSet( string name, int index, double value)
 
tonny:


ObjectSet() の本をもっと読んでください。待ってください、お手伝いします。以下は、抜粋です。

私はあなたの引用を見て、これであなたを育てます... ...

objprop_xdistance102intアンカーX距離オブジェクトのプロパティを設定/取得するための整数値(ピクセル単位)。
objprop_ydistance103intアンカーY距離オブジェクトのプロパティをピクセル単位で設定/取得するための整数

doubleを使用するのでしょうか?

OBJPROP_BACK9ブール値オブジェクトの背景描画フラグを設定/取得するためのブール値です。
OBJPROP_RAY10ブール値オブジェクトのレイフラグを設定/取得するためのブール値です。
OBJPROP_ELLIPSE11ブール値fibo 円弧の楕円フラグを設定/取得するためのブール値。


 
tonny: 何を期待されているのか、本当に迷いました。私はコンパイル時に「スタックオーバーフロー」のエラーは一度も発生しませんでした。この問題をどのように再現すればよいのか、具体的なガイドラインをお教えいただけませんか?
 
Ovo:
tonny: 何を期待されているのか、本当に迷いました。私もコンパイル時に「スタックオーバーフロー」エラーは出ませんでした。この問題をどのように再現すればよいのか、具体的なガイドラインをお教えいただけませんか?
どのように再現しようとしていたのですか?上記は私が明確に言ったコードの一部で、私は100回以上関数を 呼び出したので、もしあなたが再現したいのであれば、関数の108回の呼び出しをシミュレートする必要があるかもしれません。
 
RaptorUK:

私はあなたの引用を見て、これであなたを上げるでしょう... ...

は、これらのためにダブルを使用するのでしょうか?

私がやっていることに違いはないのですが、ここに掲載したものよりもっと多くのことがあります。
 
tonny:
私がやっていることに違いはないのですが、ここに掲載したものよりももっと多くのことが行われています。
もし、すべてのコードを投稿したくないのであれば、エラーが再現できるように、同じエラーを再現できるようなコードを投稿してください。
 
RaptorUK:
もし、エラーを再現できるように、すべてのコードを掲載したくない場合は、同じエラーを再現できるような、全文を掲載できるものをコーディングしてください。

わかりました。
 

実験的に、この種のオブジェクトのいくつかを置き換えてみました。

ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);  // Creating obj.
   ObjectSet("EURUSD", OBJPROP_CORNER, 0);    // Reference corner
   ObjectSet("EURUSD", OBJPROP_XDISTANCE, Column1x*ZoomTimes);// X coordinate   
   ObjectSet("EURUSD", OBJPROP_YDISTANCE, ZoomTimes*15);// Y coordinate

そして、以下のような関数 スタイルを使用すると、エラーは解消されました。IDEは、上記のオブジェクトを以下のオブジェクトよりも少なく扱うことができるようです。このような場合は、上記のスタイルをすべて下記のスタイルに置き換えてみて、何か他のものが現れるかどうか試してみます。

ObCreate("EURUSD",Column1x,15,ZoomTimes);
 
エラーが発生するスクリプトと、発生しない中立化されたバージョンをここに添付します。もしかしたら、誰かが別の解決策を見出すかもしれません。この大きなバグ。
ファイル: