O que causa o erro de transbordo de pilha em mql4?

 

O que causa erro de transbordo de pilha em mql4 durante a compilação? Suspeitar do uso de uma função para criar objetos. Abaixo está a função que já foi chamada mais de cem vezes para criar objetos.

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

Abaixo está um exemplo de uso

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

Eu criei outro número de objetos da mesma forma normal sem obter este erro, mas quando eu introduzi e usei esta função para criar os objetos restantes foi quando o erro apareceu. Veja o exemplo abaixo que não introduz o erro, embora seu trabalho seja mais intensivo para o número de objetos.

   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:

O que causa o erro de transbordo de pilha em mql4? Suspeitar do uso de uma função para criar objetos. Abaixo está a função que já foi chamada mais de cem vezes para criar objetos.

Abaixo está um exemplo de uso

Eu criei outro número de objetos da mesma forma normal sem obter este erro, mas quando eu introduzi e usei esta função para criar os objetos restantes foi quando o erro apareceu. Veja o exemplo abaixo que não introduz o erro, embora seu trabalho seja mais intensivo para o número de objetos.

Eu nunca tive um transbordamento de pilha, pelo que eu li eles são frequentemente causados por recorrência, mas eu não vejo isso no código que você postou . . . por que sua função é do tipo int? de que adianta passar a variável zoom duplo quando você não a usa ?

Mais uma coisa, os valores para OBJPROP_XDISTÂNCIA e OBJPROP_YDISTÂNCIA devem int não dobrar.
 
RaptorUK:
Nunca tive um estouro de pilha, pelo que li eles são frequentemente causados por recorrência, mas não vejo isso no código que você postou. . . por que sua função é do tipo int? de que adianta passar a variável zoom duplo quando você não a usa ?

Mais uma coisa, os valores para OBJPROP_XDISTÂNCIA e OBJPROP_YDISTÂNCIA devem int não dobrar.


Isso é o que me intriga.

RaptorUK:
Nunca tive um transbordamento de pilha, pelo que li eles são frequentemente causados por recorrência, mas não vejo isso no código que você postou . . . por que sua função é do tipo int? de que adianta passar a variável zoom duplo quando você não a usa ?

Mais uma coisa, os valores para OBJPROP_XDISTÂNCIA e OBJPROP_YDISTÂNCIA devem int não dobrar.

Eu encontrei e substituí alguns e ainda estou para corrigir a parte inferior do indicador.

RaptorUK:
Nunca tive um estouro de pilha, pelo que li eles são frequentemente causados por recorrência, mas não vejo isso no código que você postou . . . por que sua função é do tipo int? de que adianta passar a variável zoom duplo quando você não a usa ?

Mais uma coisa, os valores para OBJPROP_XDISTÂNCIA e OBJPROP_YDISTÂNCIA devem int não dobrar.

Por favor, leia mais livro sobre ObjectSet(). Espere, deixe-me ajudar. Abaixo está um trecho.

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


Homem, favor ler mais livro sobre ObjectSet(). Espere, deixe-me ajudar. Abaixo está um trecho.

Verei sua citação e o levantarei com este . . .

OBJPROP_XDISTANCE102intValor inteiro para definir/escondicionar a âncora X propriedade do objeto à distância em pixels.
OBJPROP_YDISTANCE103intOvalor inteiro é para definir/escolher a propriedade do objeto de distância Y em pixels.

você usaria um duplo para estes ?

OBJPROP_BACK9boolValor booleano para definir/escontrar a bandeira de fundo para objeto.
OBJPROP_RAY10boolValor booleano para colocar/esconder a bandeira de raio do objeto.
OBJPROP_ELLIPSE11boolValor booleano para definir/encontrar a bandeira da elipse para os arcos fibrosos.


 
tonny: Eu realmente me perdi no que você esperava. Também nunca recebi o erro de "estouro depilha " durante a compilação. Você poderia nos dar diretrizes exatas sobre como devemos reproduzir o problema?
 
Ovo:
tonny: Eu realmente me perdi no que você esperava. Eu também nunca recebi o erro de "estouro de pilha" durante a compilação. Você poderia nos dar diretrizes exatas sobre como devemos reproduzir o problema?
Como você estava tentando reproduzi-la? O acima é apenas uma parte do código que eu disse claramente que eu chamei a função mais de cem vezes, então se você quiser reproduzi-la você pode simular as 108 chamadas da função.
 
RaptorUK:

Vou ver sua citação e levantá-lo com isto . . .

você usaria um duplo para estes ?

No que eu faço não faz diferença, há mais do que a pequena ive postada aqui.
 
tonny:
No que eu faço não faz diferença, há mais do que a pequena ive postada aqui.
Se você não quiser postar todo o código, para que o erro possa ser reproduzido, por favor, codifique algo que você possa postar por completo que reproduzirá o mesmo erro.
 
RaptorUK:
Se você não quiser postar todo o código, para que o erro possa ser reproduzido, favor codificar algo que você possa postar por completo que reproduzirá o mesmo erro.

Está bem.
 

Fiz uma experiência e substituí alguns objetos desse tipo

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 usou o estilo funcional como abaixo e o erro foi embora. É como a IDE pode levar menos do que o acima do que o abaixo. Vou tentar substituir todo o estilo acima pelo estilo abaixo e ver se algo mais pode aparecer.

ObCreate("EURUSD",Column1x,15,ZoomTimes);
 
Anexei aqui o roteiro que produz o erro e a versão neutralizada que não o faz. Talvez alguém possa obter uma solução diferente. Homem, este grande erro.
Arquivos anexados:
Razão: