Errores, fallos, preguntas - página 2571

 
¿Qué significa la advertencia del registro de expertos, una vez finalizado el script?
2 leaked strings left

¿Cómo se puede arreglar esto?
El traductor traduce, dos cadenas filtradas a la izquierda. Pero no está claro, ¿a la izquierda de qué, de la cuerda?

El script utiliza la bibliotecaJAson .
Una cadena Json se recibe de la dll a través de memcpy_s, en la dll esta cadena tiene el tipo const wchar_t*
En el parámetro #import de la función exportada, se declara comostring & str, es decir por referencia, y la propia cadena se declara comostring str;
A continuación, la cadena str se deserializa

js.Deserialize(str); 

El problema es exactamente la deserialización de la cadena entrante desde memcpy_s.

Ya que si se crea una cadena de comprobación json en el script

string str = "{\"s\":\"1000\"}";

el mensaje de advertencia no aparece.
Deserializando una cadena desde la dll, el mensaje de advertencia aparece de nuevo después de que el script termine, quedan 2 cadenas filtradas

Intenté convertir una cadena en una matriz de caracteres StringToCharArray, y deserializar la matriz de caracteres.
Pero el problema persiste, y aparecen 2 cadenas filtradas.
¿Cuál puede ser la razón de esto?

 
Desde la dll he intentado pasar explícitamenteel check json string
L"{\"s\":\"1000\"}"
El aviso de
2 cadenas filtradas que quedaban ha desaparecido.
Resulta que una función de la dll que lee los datos de la red provoca este comportamiento.

Pero no entiendo la interpretación de
las2 cadenas filtradas que quedan, ¿qué significa exactamente ydónde indagar más?
 
Roman:
Desde la dll, he intentado pasar explícitamentela cadena json de comprobación
El aviso de
2 cadenas filtradas a la izquierda ha desaparecido.
Resulta que la función de la dll que lee los datos de la red provoca ese comportamiento.

Pero no entiendo la interpretación de
las2 cadenas filtradas que quedan, ¿qué significa exactamente ydónde indagar más?

Si se traduce libremente, entonces: "2 líneas causan una fuga de memoria".

Literalmente, significa más o menos lo siguiente: quedan 2 cadenas actuales.

 

en la última versión de mt4 en el probador iHigh, iTime funciones no funcionan para thereim marcos por encima del marco diario

iHigh(NULL,PERIOD_W1,0) = 0
iTime(NULL,PERIOD_W1,0) = NULL


 
Artyom Trishkin:

Si se traduce libremente, entonces: "2 líneas causan una fuga de memoria".

Y literalmente, es así: quedan 2 líneas de corriente.

Lo interesante, es que cuando obtengo una cadena Json y sin deserializarla la emito al comentario, tal cual, no hay fuga.
Cuando empiezo a deserializar para obtener el elemento de cadena Json, empieza a tener fugas.
No está claro, ¿la biblioteca tiene fugas...

 
Roman:

Lo interesante es que cuando obtengo una cadena Json y sin deserializarla la emito al comentario, tal cual, no hay ninguna fuga.
Cuando empiezo a deserializar para obtener el elemento de cadena Json, empieza a tener fugas.
No sé si la biblioteca tiene fugas...

Está goteando. La memoria para las cadenas se asigna, los bytes se copian, pero la memoria no se borra.

¿Tienes el código fuente?

Felicitaciones a los desarrolladores por el gestor de memoria para llevar el control de esto.

 
Vladimir Simakov:

Tiene una fuga. La memoria para las cadenas se asigna, los bytes se copian, pero la memoria no se borra.

¿Tiene el código fuente?

Hay que felicitar a los desarrolladores por el gestor de memoria que hace un seguimiento de esto.

La biblioteca parece llamar a Clear () en el método de la clase Deserialize;

virtual bool Deserialize (string js, int acp = CP_ACP)
{
   int i = 0;
   Clear ();
   CJAVal::code_page = acp;
   char arr [];
   int slen = StringToCharArray (js, arr, 0, WHOLE_ARRAY, CJAVal::code_page);
   return Deserialize (arr, slen, i);
}

Obtuve el código fuente de aquí.

 
Roman:

La biblioteca llama a Clear () en el método de la clase Deserialize;

El código fuente fue tomado de aquí.

La fuga no está ahí, sino que lo más probable es que esté en esa dll, de la que sacas la cadena.

 
Roman:

Parece que en la biblioteca, en el método de la clase Deserialize, se llama a Clear ();

Obtuve el código fuente de aquí.

¿Cómo se crea CJVal? ¿Probablemente new CJVal()?

La fuga no está ahí, sino que lo más probable es que esté en esa dll, de la que sacas la cadena.

Es poco probable que el terminal lo capte.
 
Vladimir Simakov:

La fuga no está ahí, sino que lo más probable es que esté en la dll de la que se obtiene la cadena.

También me da la impresión de que la función que lee los datos tiene fugas.
Primero almacena los datos en el búfer, luego los transfiere y, una vez transferidos, el búfer se borra, según el desarrollador de la biblioteca.
Pero parece que hay un error en la limpieza del buffer.
Pero lo interesante es que si no deserializamos la cadena en el script, no hay fuga, es decir, el problema se produce en el momento de la deserialización en el script.
Sólo estoy comprobando diferentes variantes de posibles causas.
Lamentablemente no hay código fuente, ya que el .lib está cerrado.