Was verursacht einen Stapelüberlauffehler in mql4? - Seite 2

 
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.


Siehe meinen Beitrag kurz vor diesem.
 
Sie beigefügt
11/13/2013 03:25 PM 37,911 Ind_error_tester.mq4
11/13/2013 03:25 PM 37,911 Ind_error_tester_Neutralized.mq4
Beide Dateien sind identisch.
 
WHRoeder:
Sie beigefügt
11/13/2013 03:25 PM 37,911 Ind_error_tester.mq4
11/13/2013 03:25 PM 37,911 Ind_error_tester_Neutralized.mq4
Beide Dateien sind identisch.

Ja, Entschuldigung. Ich habe noch einmal angehängt.
Dateien:
 
was mit mt4 sind wir gona Coder oder Bug Sammler sein
 
RaptorUK:
... warum ist Ihre Funktion vom Typ int?
Schade, dass Sie diese Frage nicht beantwortet haben ... Machen Sie die Funktion zu einer void , da sie nichts zurückgeben muss, entfernen Sie das return(0) und kompilieren Sie neu, was passiert?
 
Offenbar kann es eine so große Funktion nicht verarbeiten.
//+-------------------------------------------
//| Custom indicator initialization function  
//+-------------------------------------------
 int init()
  {
//---- indicators

int Column1x=10,Column2x=300,Column3x=590,
    Column1xp=70,Column2xp=360,Column3xp=650,
    Column1xg=130,Column2xg=420,Column3xg=710,
    Column1xa=250,Column2xa=540,Column3xa=830;

//---------------USD--------------------------
   //---- EURUSD-------------------
   ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);
 :
   ObjectSet("EURGBP2", OBJPROP_YDISTANCE, ZoomTimes*60);



   ObjectCreate("EURGBP2c", OBJ_LABEL, 0, 0, 0);
:
//+------------------------------------------------------
//| Custom indicator initialization function             
//+------------------------------------------------------
int Column1x=10,Column2x=300,Column3x=590,
    Column1xp=70,Column2xp=360,Column3xp=650,
    Column1xg=130,Column2xg=420,Column3xg=710,
    Column1xa=250,Column2xa=540,Column3xa=830;
int init(){ init1(); init2(); }
int init1()
  {
//---- indicators

//---------------USD------------------------------------
   //---- EURUSD-------------------
   ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);
:
   ObjectSet("EURGBP2", OBJPROP_YDISTANCE, ZoomTimes*60);
}
int init2()
  {
   ObjectCreate("EURGBP2c", OBJ_LABEL, 0, 0, 0);
:
 
RaptorUK:
Schade, dass Sie diese Frage nicht beantwortet haben ... machen Sie die Funktion zu einer void , da sie nichts zurückgeben muss, entfernen Sie das return(0) und kompilieren Sie neu, was passiert?


Ja, damit ist es auch erledigt. ABER warum? Ich meine, was wäre, wenn die Funktion ein int wäre und wir den Wert bräuchten. Warum ist es so, dass das Ändern eines Teils der Objekte das Problem löst, egal ob die Funktion int ist oder nicht. Sogar start, init und deinit sind Ints und sie geben (0) zurück, also ist das nicht das Problem.
 
WHRoeder:
Offenbar kann es eine so große Funktion nicht verarbeiten.


whroeder weiß, wovon ich spreche.
 
tonny:

Ja, das macht es auch aus. ABER warum? Ich meine, was wäre, wenn die Funktion ein int wäre und wir den Wert bräuchten. Warum ist es so, dass das Ändern eines Teils des Objekts das Problem löst, egal ob die Funktion int ist oder nicht. Sogar start, init und deinit sind ints und sie geben (0) zurück, also ist das nicht das Problem.
return(0) gibt einen int zurück, der int ist Null ... ein void gibt keinen Wert zurück, wenn man von einer void-Funktion früh zurückkehren will, benutzt man return;
 
tonny:

whroeder versteht, wovon ich spreche.
Aber es kann mit so großen Funktionen umgehen ... wie ich bereits erklärt habe, ändern Sie den Funktionstyp und es gibt keinen Kompilierungsfehler für die gleiche Größe der Funktion ...