Quelle est la cause de l'erreur de débordement de pile dans mql4 ?

 

Qu'est-ce qui provoque une erreur de débordement de pile dans mql4 pendant la compilation ? Je soupçonne l'utilisation d'une fonction pour créer des objets. Voici la fonction qui a été appelée plus de cent fois pour créer des objets.

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

Voici un exemple d'utilisation

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

J'ai créé le même nombre d'objets de manière normale sans obtenir cette erreur, mais lorsque j'ai introduit et utilisé cette fonction pour créer les objets restants, l'erreur est apparue. Voyez l'exemple ci-dessous qui n'introduit pas l'erreur même s'il demande plus de travail pour le nombre d'objets.

   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:

Qu'est-ce qui provoque une erreur de dépassement de pile dans mql4 ? Je soupçonne l'utilisation d'une fonction pour créer des objets. Vous trouverez ci-dessous la fonction qui a été appelée plus de cent fois pour créer des objets.

Voici un exemple d'utilisation

J'ai créé le même nombre d'objets de manière normale sans obtenir cette erreur, mais lorsque j'ai introduit et utilisé cette fonction pour créer les objets restants, l'erreur est apparue. Voyez l'exemple ci-dessous qui n'introduit pas l'erreur même s'il demande plus de travail pour le nombre d'objets.

Je n'ai jamais eu de débordement de pile, d'après ce que j'ai lu, ils sont souvent causés par la récursion, mais je ne vois pas cela dans le code que vous avez posté ... pourquoi le type de votre fonction est int? quel est l'intérêt de passer la variable double zoom si vous ne l'utilisez pas ?

Une dernière chose, les valeurs pour OBJPROP_XDISTANCE et OBJPROP_YDISTANCE sont supposées être int et non double.
 
RaptorUK:
Je n'ai jamais eu de débordement de pile, d'après ce que j'ai lu, ils sont souvent causés par la récursion, mais je ne vois pas cela dans le code que vous avez posté... pourquoi votre fonction est de type int? quel est l'intérêt de passer la variable double zoom si vous ne l'utilisez pas ?

Une dernière chose, les valeurs pour OBJPROP_XDISTANCE et OBJPROP_YDISTANCE sont supposées être int et non double.


C'est ce qui m'intrigue.

RaptorUK:
Je n'ai jamais eu de débordement de pile, d'après ce que j'ai lu, ils sont souvent causés par la récursion, mais je ne vois pas cela dans le code que vous avez posté ... pourquoi le type de votre fonction est int? quel est l'intérêt de passer la variable double zoom si vous ne l'utilisez pas ?

Une dernière chose, les valeurs de OBJPROP_XDISTANCE et OBJPROP_YDISTANCE sont censées être int et non double.

J'ai fait quelques recherches et remplacements et je dois encore corriger la partie inférieure de l'indicateur.

RaptorUK:
Je n'ai jamais eu de débordement de pile, d'après ce que j'ai lu, ils sont souvent causés par la récursion, mais je ne vois pas cela dans le code que vous avez posté ... pourquoi le type de votre fonction est int? quel est l'intérêt de passer la variable double zoom si vous ne l'utilisez pas ?

Une dernière chose, les valeurs pour OBJPROP_XDISTANCE et OBJPROP_YDISTANCE sont supposées être int et non double.

S'il vous plaît, lisez plus de livres sur ObjectSet(). Attends, laisse-moi t'aider. Voici un extrait de ce livre.

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


Mec, s'il te plaît, lis plus de livres sur ObjectSet(). Attendez, laissez-moi vous aider. Voici un extrait.

Je vais voir votre devis et vous relancer avec ça...

OBJPROP_XDISTANCE102intValeur entière pour définir/obtenir la propriété de l'objet anchor X distance en pixels.
OBJPROP_YDISTANCE103intValeur entière pour définir/obtenir la propriété de l'objet anchor Y distance en pixels.

Vous utiliseriez un double pour cela ?

OBJPROP_BACK9boolValeur booléenne pour définir/obtenir l'indicateur de dessin en arrière-plan de l'objet.
OBJPROP_RAY10boolValeur booléenne pour définir/obtenir l'indicateur de rayon de l'objet.
OBJPROP_ELLIPSE11boolValeur booléenne pour définir/obtenir l'indicateur d'ellipse pour les arcs de fibro.


 
tonny : Je me suis vraiment perdu dans ce que vous attendiez. Je n'ai jamais eu l'erreur "stack overflow " pendant la compilation non plus. Pourriez-vous nous donner des indications précises sur la façon dont nous devrions reproduire le problème ?
 
Ovo:
tonny : Je me suis vraiment perdu dans ce que vous attendiez. Je n'ai jamais eu l'erreur "stack overflow" pendant la compilation non plus. Pourriez-vous nous donner des indications précises sur la façon dont nous devrions reproduire le problème ?
Comment avez-vous essayé de le reproduire ? Le code ci-dessus est juste une partie du code que j'ai dit clairement - j'ai appelé la fonction plus de cent fois, donc si vous voulez le reproduire, vous devriez simuler les 108 appels de la fonction.
 
RaptorUK:

Je vais voir votre devis et je vous relance avec ça...

utiliseriez-vous un double pour cela ?

Dans ce que je fais, cela ne fait aucune différence, il y a plus que le peu que j'ai posté ici.
 
tonny:
Dans ce que je fais, cela ne fait aucune différence, il y a plus que le peu que j'ai posté ici.
Si vous ne voulez pas poster tout le code, afin que l'erreur puisse être reproduite, veuillez coder quelque chose que vous pouvez poster en entier et qui reproduira la même erreur.
 
RaptorUK:
Si vous ne voulez pas poster tout le code, afin que l'erreur puisse être reproduite, veuillez coder quelque chose que vous pouvez poster en entier et qui reproduira la même erreur.

D'accord.
 

J'ai fait une expérience en remplaçant certains de ces objets par d'autres.

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

et utilisé le style de fonction comme ci-dessous et l'erreur a disparu. C'est comme si l'IDE pouvait accepter moins de ce qui précède que de ce qui suit. Je vais essayer de remplacer tous les styles ci-dessus par le style ci-dessous et voir si quelque chose d'autre peut apparaître.

ObCreate("EURUSD",Column1x,15,ZoomTimes);
 
J'ai attaché ici le script qui produit l'erreur et la version neutralisée qui ne la produit pas. Peut-être que quelqu'un pourrait trouver une solution différente. C'est un gros bug.
Dossiers :
Raison: