Erreurs, bugs, questions - page 2243
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
J'ai essayé de télécharger une nouvelle version de l'indicateur sur le marché. Le test s'est terminé avec des erreurs. Rapport d'erreur comme sur l'image en annexe avec le contenu suivant :
Peut-être que le problème se trouve dans le testeur ?Pourquoi avez-vous mélangé les deux styles ? Si vous utilisez la première ligne pour définir le code de la flèche, utilisez la deuxième ligne dans le même style :
Merci, ça m'a aidé.
2 styles ? Je ne savais pas pour les styles. C'est juste qu'auparavant vous ne pouviez faire cette section que de cette façon. Il y a eu un changement. Je programme en MQL4 depuis plus de 10 ans. Et maintenant les développeurs ont changé le langage et beaucoup de mes codes ne fonctionnent plus. Je suis très déçu. Les changements n'étaient pas pour le mieux. Cela signifie que je dois refaire une énorme quantité de codes. Même s'ils sont vieux, ils ont été beaucoup utilisés.
J'ai essayé de télécharger une nouvelle version de l'indicateur sur le marché. Le test s'est terminé avec des erreurs. Rapport d'erreur tel que présenté dans l'image en annexe avec le contenu suivant :
Peut-être le problème se situe-t-il au niveau du testeur ?Veuillez créer une demande auprès de servicedesk, nous allons trouver une solution.
UPD : J'ai trouvé votre demande.
Libère le tampon de tout tableau dynamique et fixe la taille de la dimension zéro à 0.
Lors de l'écriture de scripts et d'indicateurs, la nécessité d'utiliser la fonction ArrayFree() peut se présenter rarement, car toute la mémoire utilisée est immédiatement libérée, et dans les indicateurs personnalisés, le travail principal avec les tableaux est représenté par l'accès aux tampons des indicateurs, dont les tailles sont automatiquement gérées par le sous-système exécutif du terminal.
Si vous devez gérer la mémoire dans des conditions dynamiques complexes dans votre programme, la fonction ArrayFree() vous permettra de libérer explicitement et immédiatement la mémoire occupée par un tableau dynamique qui n'est plus nécessaire.
Vous voyez ? Inutile.
Naturellement, une fois que la mémoire est libérée, et que vous l'allouez à nouveau en assignant une taille au tableau, personne ne peut garantir son contenu.
Utiliser l'initialisation du tableau : ArrayInitialize()
Que voulez-vous dire, personne ne garantit le contenu ? Si la mémoire a été libérée, elle a disparu, alors comment faire pour y mettre des déchets ? Ou est-ce que le fait d'effacer la mémoire implique de donner la permission à cette mémoire d'être utilisée par une autre partie du programme, sans pour autant l'effacer ?
Comment ça, personne ne garantit le contenu ? Si la mémoire a été effacée, elle n'est plus là, alors comment se fait-il qu'elle contienne des déchets ? Ou est-ce que le fait d'effacer la mémoire implique de donner la permission à cette mémoire d'être utilisée par une autre partie du programme, sans pour autant l'effacer ?
ArrayResize ne nettoie pas la mémoire, c'est pourquoi elle contient des déchets, provenant du "consommateur" précédent.
Ceci est fait pour la rapidité, car une fois la mémoire allouée à un tableau, dans 99,99(9)% des cas, l'utilisateur va le "remplir" avec ses données.
Merci, ça m'a aidé.
Deux styles ? Je ne savais pas pour les styles. C'est juste qu'auparavant vous ne pouviez faire cette section que de cette façon. Il y a eu un changement. Je programme en MQL4 depuis plus de 10 ans. Et maintenant les développeurs ont changé le langage et beaucoup de mes codes ne fonctionnent plus. Je suis très déçu. Les changements n'étaient pas pour le mieux. Cela signifie que je dois refaire une énorme quantité de codes. Ils sont peut-être vieux, mais ils étaient bien plus utiles.
N'est-ce pas ainsi que le code de flèche était défini avant l'introduction des fonctions ObjectSetXXX de mql4 ?
J'écris également en mql depuis environ 10 ans (peut-être plus - comme le temps passe vite...) - je commence à oublier les fonctions strictement quaternaires - j'écris du code multiplateforme quand c'est possible.
ArrayResize ne vide pas la mémoire, c'est pourquoi elle contient des déchets du "consommateur" précédent.
Ceci est fait pour la rapidité, car après l'allocation de mémoire à un tableau, dans 99,99(9)% des cas, l'utilisateur va le "remplir" avec ses données.
Alors pourquoi les valeurs numériques sont-elles des constantes "poubelles", même après le redémarrage du terminal ?
Personnellement, je me suis retrouvé coincé avec la simple addition du contenu des cellules d'un autre tableau, et je me suis longtemps posé le problème.
Alors pourquoi les valeurs numériques sont-elles des constantes "poubelles", même après le redémarrage du terminal ?
Personnellement, je me suis fait griller sur une simple sommation du contenu des cellules d'un autre tableau, et je me suis longtemps demandé ce qui n'allait pas.
Peu importe le type de données contenues dans le tableau non initialisé, à tout moment, les données peuvent changer, personne ne garantit leur valeur.
C'est pourquoi l'utilisation de variables non initialisées (mémoire de lecture) conduit parfois à des situations où il faut beaucoup de temps pour trouver la cause :
Je ne peux que donner quelques conseils.
Vous devriez prendre l'habitude de toujours initialiser les données, afin de ne pas perdre beaucoup de temps à l'avenir à rechercher des erreurs liées à l'absence d'initialisation.
Comment ça, personne ne garantit le contenu ? Si la mémoire a été effacée, elle n'est plus là, alors comment se fait-il qu'elle contienne des déchets ? Ou est-ce que le fait d'effacer la mémoire implique de donner la permission à cette mémoire d'être utilisée par une autre partie du programme, sans pour autant l'effacer ?
Que voulez-vous dire par "non" ? Vous ne retirez pas la carte mémoire de la fente de la carte mère. Et si la mémoire est présente et qu'elle est libérée (pas initialisée avec une valeur, mais libérée), alors elle commence à être utilisée pour d'autres besoins du programme.
Peu importe les données contenues dans un tableau non initialisé, à tout moment, les données peuvent changer, personne ne garantit leur valeur.
C'est pourquoi l'utilisation de variables non initialisées (mémoire de lecture) conduit parfois à des situations, avec une longue recherche de la cause :
Je ne peux que donner quelques conseils.
Vous devriez prendre l'habitude de toujours initialiser les données, afin de ne pas perdre beaucoup de temps à l'avenir à rechercher des erreurs liées à l'absence d'initialisation.
Merci pour les précisions et les conseils.