Cosa causa l'errore di stack overflow in mql4?

 

Cosa causa l'errore di stack overflow in mql4 durante la compilazione? Sospetto di usare una funzione per creare oggetti. Qui sotto c'è la funzione che è stata chiamata più di cento volte per creare oggetti.

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

Qui sotto c'è un esempio di utilizzo

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

Ho creato lo stesso numero di oggetti in modo normale senza ottenere questo errore, ma quando ho introdotto e utilizzato questa funzione per creare gli oggetti rimanenti è quando l'errore è saltato fuori. Vedi l'esempio qui sotto che non introduce l'errore anche se è più laborioso per il numero di oggetti.

   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:

Cosa causa l'errore di stack overflow in mql4? Sospetto di usare una funzione per creare oggetti. Qui sotto c'è la funzione che è stata chiamata più di cento volte per creare oggetti.

Qui sotto c'è un esempio di utilizzo

Ho creato lo stesso numero di oggetti in modo normale senza ottenere questo errore, ma quando ho introdotto e usato questa funzione per creare gli oggetti rimanenti è quando l'errore è saltato fuori. Vedi l'esempio qui sotto che non introduce l'errore anche se è più laborioso per il numero di oggetti.

Non ho mai avuto uno stack overflow, da quello che ho letto sono spesso causati dalla ricorsione ma non lo vedo nel codice che hai postato... perché la tua funzione è di tipo int? che senso ha passare la variabile double zoom quando non la usi?

Un'altra cosa, i valori di OBJPROP_XDISTANCE e OBJPROP_YDISTANCE dovrebbero essere int e non double.
 
RaptorUK:
Non ho mai avuto uno stack overflow, da quello che ho letto sono spesso causati dalla ricorsione ma non lo vedo nel codice che hai postato... perché la tua funzione è di tipo int? che senso ha passare la variabile double zoom quando non la usi?

Un'altra cosa, i valori di OBJPROP_XDISTANCE e OBJPROP_YDISTANCE dovrebbero essere int e non double.


È questo che mi lascia perplesso.

RaptorUK:
Non ho mai avuto uno stack overflow, da quello che ho letto sono spesso causati dalla ricorsione, ma non lo vedo nel codice che hai postato... perché la tua funzione è di tipo int? che senso ha passare la variabile double zoom quando non la usi?

Un'altra cosa, i valori per OBJPROP_XDISTANCE e OBJPROP_YDISTANCE dovrebbero essere int non double.

Ho fatto qualche ricerca e sostituzione e devo ancora correggere la parte inferiore dell'indicatore.

RaptorUK:
Non ho mai avuto uno stack overflow, da quello che ho letto sono spesso causati dalla ricorsione, ma non lo vedo nel codice che hai postato... perché la tua funzione è di tipo int? Che senso ha passare la variabile double zoom quando non la usi?

Un'altra cosa, i valori di OBJPROP_XDISTANCE e OBJPROP_YDISTANCE dovrebbero essere int e non double.

Per favore, leggete più libri su ObjectSet(). Aspetta, lascia che ti aiuti. Qui sotto c'è un estratto.

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


Per favore, leggete più libri su ObjectSet(). Aspetta, lascia che ti aiuti. Qui sotto c'è un estratto.

Vedo la tua citazione e ti rilancio con questo . . .

OBJPROP_XDISTANCE102intValore intero per impostare/ottenere la proprietà dell'oggetto ancora X distance in pixel.
OBJPROP_YDISTANCE103intValore intero per impostare/ottenere la proprietà dell'oggetto distanza Y dell'ancora in pixel.

usereste un doppio per questi?

OBJPROP_BACK9boolValore booleano per impostare/ottenere il flag di disegno dello sfondo per l'oggetto.
OBJPROP_RAY10boolValore booleano per impostare/ottenere il flag del raggio dell'oggetto.
OBJPROP_ELLIPSE11boolValore booleano per impostare/ottenere il flag di ellisse per gli archi di fibo.


 
Tonny: mi sono davvero perso in quello che ti aspettavi. Neanche io ho mai ricevuto l'errore "stack overflow" durante la compilazione. Potresti darci indicazioni precise su come riprodurre il problema?
 
Ovo:
Tonny: mi sono davvero perso in quello che ti aspettavi. Neanche io ho mai ricevuto l'errore "stack overflow" durante la compilazione. Potresti darci indicazioni precise su come riprodurre il problema?
Come stavi cercando di riprodurlo? Quanto sopra è solo una parte del codice che ho detto chiaramente, ho chiamato la funzione oltre un centinaio di volte, quindi se vuoi riprodurla potresti voler simulare le 108 chiamate della funzione.
 
RaptorUK:

Vedo il tuo preventivo e rilancio con questo . . .

useresti un doppio per questi?

In quello che sto facendo non fa differenza, c'è più di quel poco che ho postato qui.
 
tonny:
In quello che sto facendo non fa differenza c'è più di quel poco che ho postato qui.
Se non vuoi postare tutto il codice, in modo che l'errore possa essere riprodotto, per favore codifica qualcosa che puoi postare per intero che riproduca lo stesso errore.
 
RaptorUK:
Se non vuoi postare tutto il codice, in modo che l'errore possa essere riprodotto, per favore codifica qualcosa che puoi postare per intero che riproduca lo stesso errore.

Ok.
 

Ho fatto un esperimento e ho sostituito alcuni di questi oggetti

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

E ho usato lo stile della funzione come sotto e l'errore è andato via. È come se l'IDE riuscisse a prendere meno di quello che c'è sopra che di quello che c'è sotto. Proverò a sostituire tutto lo stile di cui sopra con lo stile qui sotto e vedere se qualcos'altro potrebbe comparire.

ObCreate("EURUSD",Column1x,15,ZoomTimes);
 
Ho allegato qui lo script che produce l'errore e la versione neutralizzata che non lo produce. Forse qualcuno potrebbe trovare una soluzione diversa. Amico questo grande bug.
Motivazione: