Erreurs, bugs, questions - page 2569

 
Roman:

Oui, et contient des déchets.

La question était tout à fait différente. Initialiser avec une valeur vide, pas zéro. Si c'est possible.
Le zéro est un chiffre ! Une valeur vide comme je le comprends, pas de chiffres, rien.
Mais les cellules de mémoire sont initialisées avec ce vide ;))


Tout est possible, mais la tâche n'est pas claire. Soit allouer à partir de codes de plage de caractères avec un état spécial si possible(CHAR_MAX- vide, CHAR_MAX-1 - erreur, etc.), soit stocker parallèlement au tableau de caractères des indicateurs décrivant l'état du tableau de caractères (un octet - indicateurs "vides" pour huit cellules). Mais cela n'est probablement pas nécessaire du tout, c'est un désir étrange.

ZS : probablement l'influence des langages où tous les tableaux sont associatifs.
 
Roman:

Oui, et contient des déchets.

La question était tout à fait différente. Initialiser avec une valeur vide, pas zéro. Si c'est possible.
Le zéro est un chiffre ! Une valeur vide comme je le comprends, pas de chiffres, rien.
Mais les cellules de mémoire sont initialisées avec ce vide ;))

Cela ne marche pas comme ça)))) Un octet est une unité d'information. Si elle est là, alors il y a une valeur.
 
Maksim Emeliashin:

MT5 Build 2145 du 17 septembre 2019.

Lorsque le testeur démarre, il désactive automatiquement le cluster d'agents du réseau local. S'il est mis en marche de force, au prochain démarrage du testeur, il le met de nouveau en marche de force.

J'en ai marre de ce problème qui traîne pendant six mois, quand soudain la moitié des agents n'acceptent plus le travail et que vous devez les forcer à partir et à revenir,

et maintenant je dois activer les agents locaux à chaque fois que le testeur démarre.

Qu'est-ce qui est affiché dans le journal de bord du testeur lors de cette opération ?

 
Slava:

Qu'est-ce qui est affiché dans le journal de bord du testeur lors de cette opération ?

Je l'ai déjà eu, il y avait une version debug de l'EA, apparemment il ne peut pas être utilisé pour le testeur dans les agents locaux, mais seulement dans ceux sur votre ordinateur, bien que ce ne soit pas clair pourquoi.
 
Roman:

Oui, et contient des déchets.

La question était tout à fait différente. Pour initialiser avec une valeur vide, pas zéro. Si c'est possible.
Le zéro est un chiffre ! Une valeur vide comme je le comprends, pas de chiffres, rien.
Mais les cellules de mémoire sont initialisées avec ce vide ;))

par exemple, initialiser les différents types avec "empty".

   uchar  c=EMPTY_VALUE;
   uint   i=EMPTY_VALUE;
   ulong  l=EMPTY_VALUE;
   short  s=EMPTY_VALUE;
   float  f=EMPTY_VALUE;
   double d=EMPTY_VALUE;
   string str=EMPTY_VALUE;
   uchar uc[];
   StringToCharArray(str,uc);

que nous avons sous forme HEX lorsque nous déboguons :


Avec les cordes, c'est une drôle de chose.


mais si la chaîne est initialisée comme ceci

string str="";

puis le résultat :


Eh bien, si vous n'initialisez pas du tout(string str ;) ainsi qu'initialisez =NULL, alors ce dont vous avez besoin est un vrai void :


 
Nikolai Semko:

par exemple, initialiser les différents types avec "empty".

que nous avons sous forme HEX lorsque nous déboguons :


Avec les cordes, c'est une drôle de chose.


mais si la chaîne est initialisée comme ceci

puis le résultat :


Eh bien, si vous n'initialisez pas du tout (string str ;) et si vous initialisez =NULL, alors ce dont vous avez besoin est un vrai void :


Où avez-vous vu un vide ? C'est ce qu'on appelle un dépassement de tableau. En C/C++, comportement indéfini et ici erreur d'exécution.
Tous les autres types sont implicitement castés à partir de double, donc c'est là aussi.
 
Vladimir Simakov:
Où voyez-vous du vide ? C'est ce qu'on appelle un dépassement de tableau. En C/C++ undefined behavior, et ici c'est une erreur d'exécution.
Tous les autres types sont implicitement castées à partir de double, donc tout est correct là aussi.

La chaîne est vide (pas le tableau uchar), comme si elle n'existait pas, c'est-à-dire que même la mémoire n'est pas allouée.

Ceci est observé dans d'autres types. Si vous déclarez une variable, cela signifie que la mémoire est déjà allouée.
Mais en fait, la chaîne de caractères n'est pas un type primitif, mais un type de référence, de même que tout tableau.

 

Je n'arrive pas à trouver comment vérifier lePrintFormat.

Note

PrintFormat() n'est pas exécuté dans le testeur de stratégie en mode optimisation.

Des idées ?

 
Igor Makanu:

Je n'arrive pas à trouver comment vérifier lePrintFormat.

Note

PrintFormat() n'est pas exécuté dans le testeur de stratégie en mode optimisation.

Des idées ?

Vérifier quoi ?

Vous voulez voir comment il est imprimé ?

Dans le visualiseur.

 
Nikolai Semko:

la chaîne est vide, comme si elle n'existait pas, c'est-à-dire que même la mémoire n'est pas allouée.

Ceci est observé pour les autres types. Si vous déclarez une variable, cela signifie que la mémoire est déjà allouée.
Mais en fait, une chaîne de caractères n'est pas un type primitif, mais un type de référence.

Comment pourrait-il en être autrement ? La mémoire de l'objet chaîne est allouée dans le tas et l'adresse mémoire où le texte commence est 0x00.