Erreurs, bugs, questions - page 2571

 
A partir de la dll, j'ai essayé de passer explicitementle contrôle de la chaîne json
L"{\"s\":\"1000\"}"
L'avertissement
"2 leaked strings left" a disparu.
Il s'avère qu'une fonction de la dll qui lit les données du réseau provoque ce comportement.

Mais je ne comprends pas l'interprétation de
2 cordes fuites à gauche, ce que cela signifie exactement etoù creuser plus loin?
 
Roman:
À partir de la dll, j'ai essayé de passer explicitementle contrôle de la chaîne json
. L'avertissement de
2 chaînes manquantes a disparu.
Il s'avère que la fonction de la dll qui lit les données du réseau provoque ce comportement.

Mais je ne comprends pas l'interprétation de
2 cordes de fuite restantes, qu'est-ce que cela signifie exactement etoù creuser davantage ?

Si on le traduit librement, alors : "2 lignes provoquent une fuite de mémoire".

Littéralement, cela signifie à peu près ceci : il reste 2 cordes courantes.

 

dans la dernière version de mt4, dans le testeur, les fonctions iHigh, iTime ne fonctionnent pas pour les cadres supérieurs au cadre quotidien.

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


 
Artyom Trishkin:

Si on le traduit librement, alors : "2 lignes provoquent une fuite de mémoire".

Et littéralement, c'est comme ça : il reste 2 lignes actuelles.

Ce qui est intéressant, c'est que lorsque je reçois une chaîne Json et que, sans la désérialiser, je l'envoie dans le commentaire, telle quelle, il n'y a pas de fuite.
Lorsque je commence à désérialiser pour obtenir un élément de chaîne Json, il y a une fuite.
Ce n'est pas clair, est-ce que la bibliothèque fuit...

 
Roman:

Ce qui est intéressant, c'est que lorsque je récupère une chaîne Json et que, sans la désérialiser, je l'envoie dans le commentaire, telle quelle, il n'y a pas de fuite.
Lorsque je commence à désérialiser pour obtenir un élément de chaîne Json, il y a une fuite.
Je ne sais pas si la bibliothèque fuit...

Il y a une fuite. La mémoire pour les chaînes de caractères est allouée, les octets sont copiés, mais la mémoire n'est pas effacée.

Vous avez le code source ?

Félicitations aux développeurs pour le gestionnaire de mémoire qui permet de garder la trace de tout cela.

 
Vladimir Simakov:

Il y a une fuite. La mémoire pour les chaînes de caractères est allouée, les octets sont copiés, mais la mémoire n'est pas effacée.

Avez-vous le code source ?

Félicitations aux développeurs pour le gestionnaire de mémoire qui en tient compte.

La bibliothèque semble appeler Clear () dans la méthode de la classe 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);
}

J'ai obtenu le code source d'ici.

 
Roman:

La bibliothèque appelle Clear () dans la méthode de la classe Deserialize ;

Le code source a été pris ici.

La fuite n'est pas là, mais très probablement dans cette dll, à partir de laquelle vous obtenez la chaîne.

 
Roman:

Il semble que dans la bibliothèque, dans la méthode de la classe Deserialize, Clear () est appelé ;

J'ai obtenu le code source d'ici.

Comment créer un CJVal ? Probablement un nouveau CJVal() ?

La fuite n'est pas là, mais très probablement dans cette dll, à partir de laquelle vous obtenez la chaîne.

Il est peu probable que le terminal s'en aperçoive.
 
Vladimir Simakov:

La fuite n'est pas là, mais très probablement dans la dll à partir de laquelle vous obtenez la chaîne.

J'ai aussi l'impression que la fonction qui lit les données fuit.
Il met d'abord les données en mémoire tampon, puis les transfère, et après le transfert, le tampon est effacé, selon le développeur de la librairie.
Mais il semble qu'il y ait un bug dans la compensation de la mémoire tampon.
Mais ce qui est intéressant, c'est que si nous ne désérialisons pas la chaîne dans le script, il n'y a pas de fuite, c'est-à-dire que le problème se produit au moment de la désérialisation dans le script.
Je vérifie simplement les différentes variantes des causes possibles.
Pas de code source malheureusement, car le .lib est fermé.

 
Vict:

Comment créer un CJVal ? probablement un nouveau CJVal() ?

Il est peu probable que le terminal s'en aperçoive.

Non, comme dans l'exemple de l'auteur biblique, sur la pile

CJAVal js(NULL, jtUNDEF);