Errores, fallos, preguntas - página 786

 

Uh, algo se ha estropeado en la última compilación. El .ex5 de uno de los indicadores ha crecido en tamaño casi 10 veces en comparación con el .ex5 compilado por la compilación anterior. Bueno, no es un problema. Pero apareció un error al dibujar el indicador (antes de introducir sus parámetros):

2012.07.27 02:53:57     MP2012_GRI (EURUSD,M30) Access violation read to 0x000000003FF39D25

Ya he arreglado el código 3\4. Y si vuelvo a comentar un poco, lo conseguiré (junto con el error anterior):

2012.07.27 02:56:42     Custom Indicator        'MP2012_GRI' may work incorrectly, as it requires more than 256Kb of stack memory
y realmente no funciona

Y si vuelvo a comentar un poco los dos primeros errores desaparecen, pero me salen al descargar el indicador:

2012.07.27 02:47:35     MP2012_GRI (EURUSD,M30) 9 leaked strings left
(Los números pueden ser diferentes - depende de la cantidad de código que haya comentado)

Me di cuenta de antemano, que mi función es demasiado grande por el volumen - Voy a vencer en las funciones pequeñas.

...y todo estaba bien en la última construcción

 
notused:

Uh, algo se ha estropeado en la última compilación. El .ex5 de uno de los indicadores ha crecido en tamaño casi 10 veces en comparación con el .ex5 compilado por la compilación anterior. Bueno, no es un problema. Pero apareció un error al dibujar el indicador (antes de introducir sus parámetros):

Ya he arreglado el código 3\4. Y si lo cambio un poco más, obtendré (junto con el error anterior):

Hemos reforzado el control del entorno de la caja de arena en aras de una mayor seguridad.

El mensaje sobre la pila le indica que ha utilizado más de 256 kilobytes de pila en una de sus funciones, lo cual es un problema grave en programación. Por ejemplo, en C/C++ utilizar una función de pila local incluso para 16Kb se considera una advertencia grave.

Probablemente asignes muchas matrices estáticas en las funciones, por ejemplo:

void func(void)
  {
   double arr1[128000];
   double arr2[128000];
   double arr3[128000];

  }

No debes hacer eso.

Si necesitas arrays grandes, utiliza mejor los arrays dinámicos. Por ejemplo:

double ExtArr[];

void func(void)
  {
   double arr1[];
   double arr2[];

   ArrayResize(ExtArr,128000,0);
   ArrayResize(arr1,128000,0);
   ArrayResize(arr2,128000,0);
  }
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Renat:

Hemos reforzado el control del entorno de la caja de arena en aras de una mayor seguridad.

El mensaje sobre la pila le indica que ha utilizado más de 256 kilobytes en una función de la pila, lo cual es un problema grave en programación. Por ejemplo, en C/C++ utilizar una pila local incluso en 16 kb en una función se considera una advertencia grave.

Probablemente asignes muchas matrices estáticas en las funciones, por ejemplo:

No deberías hacer eso.

Si necesita matrices grandes, utilice matrices dinámicas en su lugar. Por ejemplo:

No uso arrays estáticos en absoluto en este indicador; no paso nada más pesado que int en las funciones, etc. Pero usted utiliza activamente todo tipo de funciones gráficas.

Por ejemplo,

   ObjectSetString(0, stmp, OBJPROP_TEXT, "HB");
   ObjectSetInteger(0, stmp, OBJPROP_COLOR, hbColor);

Si se comenta la última línea, todo está bien. El problema es que tenemos muchas llamadas de este tipo y esta

ObjectSetInteger(0, stmp, OBJPROP_COLOR, hbColor);

es la vigésima o la trigésima consecutiva.

Creo que el problema radica en el tamaño de la función, ya que al comentar el código se evita el problema, mientras que la mayor parte del código consiste en ObjectSetXXX. He descubierto, mediante experimentos, que dividirlo en partes más pequeñas también es inútil: un inliner agresivo seguirá amontonando todo y generando errores. Puedo intentar poner más código, pero lo haré mañana. El servicio de atención al cliente también es mañana, si no lo resolvemos antes.

 
notused:

No uso arrays estáticos en absoluto en este indicador; no paso nada más pesado que int en las funciones, etc. Pero se utilizan activamente todo tipo de funciones gráficas.

Pero hay algo enorme, ¿no?

Por ejemplo, incluir una copia local de una clase que sólo tiene una tonelada de arrays estáticos en sus miembros. Ahí es donde suelen esconderse los depósitos de los consumidores locales de pila.


Por ejemplo,

Si se comenta la última línea, todo está bien. El problema es que tenemos muchas llamadas de este tipo y esta

es la vigésima o la trigésima consecutiva.

Creo que el problema está en el tamaño de la función, ya que comentando el código se evita el problema, y la mayor parte del código consiste en ObjectSetXXX. He descubierto, mediante experimentos, que dividirlo en partes más pequeñas también es inútil: un inliner agresivo seguirá amontonando todo y generando errores. Puedo intentar poner más código, pero lo haré mañana. Service Desk también mañana, si no lo resolvemos antes.

Dividir las funciones, apilarlas en clases.

Lo más probable es que Inliner no tenga nada que ver con ello, ya que no inserta piezas de código demasiado grandes. Especialmente si son pesadas/muchas variables locales.

 
Renat:

Pero hay algo enorme, ¿no?

Por ejemplo, incluir una copia local de una clase que sólo tiene una tonelada de arrays estáticos en sus miembros. Ahí es donde suelen esconderse los depósitos de los consumidores locales de pila.


Dividir las funciones, apilarlas en clases.

Probablemente, Inliner no tenga nada que ver con ello: no inserta trozos de código demasiado grandes. Especialmente si tienen muchas variables locales.

Servicio de atención al cliente #444495
 

¿Por qué es así? ¡Pago descuidado o qué! ¡Sólo 1 agente ganó 1 kr y 0,3 kr hicieron un pago por día!


 

Asegúrese de escribir a servicedesk con estos encabezados:

Versión del terminal y tasa de bits

...

Descripción del problema

...

Secuencia de acciones ...

...

Resultado obtenido ...

...

Resultado esperado ...

...

Información adicional ...

...

¿O puede decirlo con sus propias palabras?

 
Zeleniy:

¿o puede ponerlo todo en sus propias palabras?

Una lista sería mejor. Esto facilitará mucho la vida a quien se ocupe del bicho.
 
Zeleniy:

¿Hay que escribir a servicedesk con estos títulos?


¿o puedo hacerlo con mis propias palabras?

puede hacerlo todo con sus propias palabras, pero

Versión del terminal y tasa de bits
Descripción del problema

Secuencia de acción
Resultado obtenido
Resultado esperado

necesariamente.

------------

No estás escribiendo un ensayo sobre un tema libre, estás escribiendo un texto para un promotor que debe entender rápidamente lo que quieres de él sin ningún detalle.

 
sergeev:

puedes hacer todo por tu cuenta, pero

Versión del terminal y tasa de bits
Descripción del problema

Secuencia de acción
Resultado obtenido
Resultado esperado

necesariamente.

------------

No estás escribiendo un ensayo sobre un tema libre, estás escribiendo un texto para un promotor que debe entender rápidamente lo que quieres de él sin ningún detalle.

Elegí la sección Sitio mql5.com y la propuesta y ahora no entiendo cómo adjuntarla a los títulos.