Was verursacht einen Stapelüberlauffehler in mql4?

 

Was verursacht einen Stapelüberlauffehler in mql4 beim Kompilieren? Ich vermute, dass eine Funktion zum Erstellen von Objekten verwendet wird. Unten ist die Funktion, die über hundert Mal aufgerufen wurde, um Objekte zu erstellen.

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);
 }

Unten ist ein Beispiel für die Verwendung

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

Ich habe andere gleiche Anzahl von Objekten die normale Art und Weise erstellt, ohne diesen Fehler zu bekommen, aber wenn ich eingeführt und verwendet diese Funktion, um die restlichen Objekte zu erstellen ist, wenn der Fehler aufgetaucht. Siehe das Beispiel unten, die nicht den Fehler einführen, obwohl seine arbeitsintensiver für die Anzahl der Objekte.

   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:

Was verursacht einen Stapelüberlauffehler in mql4? Ich vermute, dass eine Funktion zum Erstellen von Objekten verwendet wird. Unten ist die Funktion, die über hundert Mal aufgerufen wurde, um Objekte zu erstellen.

Unten ist ein Beispiel für die Verwendung

Ich habe andere gleiche Anzahl von Objekten die normale Art und Weise erstellt, ohne diesen Fehler zu bekommen, aber wenn ich eingeführt und verwendet diese Funktion, um die restlichen Objekte zu erstellen ist, wenn der Fehler aufgetaucht. Siehe das Beispiel unten, die nicht den Fehler einführen, obwohl seine arbeitsintensiver für die Anzahl der Objekte.

Ich hatte noch nie einen Stapelüberlauf, nach dem, was ich gelesen habe, werden sie oft durch Rekursion verursacht, aber das sehe ich in dem Code, den Sie gepostet haben, nicht ... warum ist der Typ Ihrer Funktion int? was bringt es, die Variable double zoom zu übergeben, wenn Sie sie nicht verwenden ?

Und noch etwas, die Werte für OBJPROP_XDISTANCE und OBJPROP_YDISTANCE sollten int sein, nicht double.
 
RaptorUK:
Ich hatte noch nie einen Stapelüberlauf, nach dem, was ich gelesen habe, werden sie oft durch Rekursion verursacht, aber das sehe ich in dem Code, den du gepostet hast, nicht... warum ist deine Funktion vom Typ int? was bringt es, die Variable double zoom zu übergeben, wenn du sie nicht verwendest ?

Und noch etwas, die Werte für OBJPROP_XDISTANCE und OBJPROP_YDISTANCE sollten int sein, nicht double.


Das ist es, was mich verwirrt.

RaptorUK:
Ich hatte noch nie einen Stapelüberlauf, nach dem, was ich gelesen habe, werden sie oft durch Rekursion verursacht, aber das sehe ich in dem Code, den Sie gepostet haben, nicht ... warum ist der Typ Ihrer Funktion int? was bringt es, die Variable double zoom zu übergeben, wenn man sie nicht benutzt?

Und noch etwas, die Werte für OBJPROP_XDISTANCE und OBJPROP_YDISTANCE sollten int sein, nicht double.

Ich habe einige finden und ersetzen und im noch zu korrigieren, den unteren Teil des Indikators.

RaptorUK:
Ich hatte noch nie einen Stapelüberlauf, nach dem, was ich gelesen habe, werden sie oft durch Rekursion verursacht, aber das sehe ich in dem Code, den Sie gepostet haben, nicht ... warum ist der Typ Ihrer Funktion int? welchen Sinn hat es, die Variable double zoom zu übergeben, wenn Sie sie nicht benutzen ?

Und noch etwas, die Werte für OBJPROP_XDISTANCE und OBJPROP_YDISTANCE sollten int sein, nicht double.

Mann bitte lesen Sie mehr Buch über ObjectSet(). Warten Sie, ich helfe Ihnen. Unten ist ein Auszug.

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


Mann lesen Sie bitte mehr Buch über ObjectSet(). Warten Sie, ich helfe Ihnen. Unten ist ein Auszug.

Ich sehe dein Zitat und erhöhe mit diesem.

OBJPROP_XDISTANCE102intGanzzahliger Wert zum Setzen/Lesen der Objekteigenschaft "Anker-X-Abstand" in Pixeln.
OBJPROP_YDISTANCE103intGanzzahliger Wert zum Festlegen/Abrufen der Objekteigenschaft "Anker-Y-Abstand" in Pixeln.

Würden Sie für diese Werte einen Double-Wert verwenden?

OBJPROP_BACK9boolBoolescher Wert zum Setzen/Abfragen des Hintergrundzeichnungsflags für das Objekt.
OBJPROP_RAY10boolBoolescher Wert zum Setzen/Abrufen des Strahlenflags für das Objekt.
OBJPROP_ELLIPSE11boolBoolescher Wert zum Setzen/Abfragen des Ellipsen-Flags für Fibrobögen.


 
tonny: Ich habe wirklich nicht verstanden, was du erwartet hast. Ich habe auch nie den Fehler "Stack Overflow" während der Kompilierung erhalten. Könnten Sie uns genaue Richtlinien geben, wie wir das Problem reproduzieren sollten?
 
Ovo:
tonny: Ich habe wirklich nicht verstanden, was Sie erwartet haben. Ich habe auch nie den "Stack Overflow"-Fehler während der Kompilierung erhalten. Könnten Sie uns genaue Richtlinien geben, wie wir das Problem reproduzieren sollten?
Wie haben Sie versucht, es zu reproduzieren? Das obige ist nur ein Teil des Codes, den ich klar gesagt habe, dass ich die Funktion über hundert Mal aufgerufen habe. Wenn Sie es also reproduzieren wollen, sollten Sie die 108 Aufrufe der Funktion simulieren.
 
RaptorUK:

Ich sehe dein Zitat und erhöhe damit...

Würden Sie dafür ein Double verwenden?

Bei dem, was ich tue, macht es keinen Unterschied, es ist mehr als das Wenige, was ich hier gepostet habe.
 
tonny:
Bei dem, was ich tue, macht es keinen Unterschied, es ist mehr als das Wenige, was ich hier gepostet habe.
Wenn Sie nicht wollen, um alle den Code zu posten, so dass der Fehler reproduziert werden kann, bitte Code etwas, das Sie in vollem Umfang posten können, die den gleichen Fehler zu reproduzieren.
 
RaptorUK:
Wenn Sie nicht den gesamten Code posten wollen, damit der Fehler reproduziert werden kann, codieren Sie bitte etwas, das Sie vollständig posten können und das denselben Fehler reproduziert.

Okay.
 

Ich habe ein Experiment gemacht und einige Objekte dieser Art ersetzt

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

und verwendete den Funktionsstil wie unten und der Fehler verschwand. Seine wie die IDE kann weniger der oben als der unten nehmen. Ill versuchen, alle der oben genannten Stil mit dem unten Stil zu ersetzen und sehen, ob etwas anderes auftauchen könnte.

ObCreate("EURUSD",Column1x,15,ZoomTimes);
 
Ich habe hier das Skript angehängt, das den Fehler erzeugt, und die neutralisierte Version, bei der das nicht der Fall ist. Vielleicht findet ja jemand eine andere Lösung. Mann dieser große Fehler.