Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 596

 
Juer:

Très bien. Laissez-moi les supprimer dans OnDeinit(). Mais maintenant, j'ai une erreur de mémoire qui apparaît déjà pendant les tests... C'est-à-dire qu'il n'arrivera pas à OnDeinit().

Vous allez donc créer un tas d'objets doubles. Puis tout partira en vrille et tu ne pourras plus en trouver la fin.

 
Artyom Trishkin:

Donc vous créez un tas d'objets en double. Ensuite, tout ça va gonfler, et tu n'en trouveras pas la fin.

Comment puis-je savoir exactement où je ne supprime pas d'objets ? C'est un gros programme :)

 
Juer:

Comment puis-je savoir exactement où je ne supprime pas d'objets ? C'est un grand programme :)

Vous devez d'abord déterminer où et comment vous avez créé une telle pile. Si ma mémoire est bonne, vous en avez, quoi, dix mille ? Qu'est-ce que c'est ? Des objets de données historiques ? Ou quel genre d'objets en possède autant ? Un tableau d'objets - de quoi ?

 
Artyom Trishkin:

Vous devez d'abord déterminer où et comment vous avez fait une telle pile. Si ma mémoire est bonne, vous en avez des dizaines de milliers là-bas, n'est-ce pas ? Qu'est-ce que c'est ? Des objets de données historiques ? Ou quel genre d'objets en possède autant ? Un tableau d'objets - de quoi ?

Ah, il y a beaucoup de choses là-dedans. Principalement les types de bougies et les règles. C'est compliqué ;))

 
Juer:

Comment puis-je savoir exactement où je ne supprime pas d'objets ? C'est un grand programme :)

Vous ne créez pas un nouvel objet à chaque tic. Bien sûr, c'est possible (mais pas toujours raisonnable à mon avis), mais il doit être plus raisonnable de dégonfler l'objet immédiatement après avoir fini de travailler avec lui. C'est la seule explication à laquelle je peux penser.

 
Juer:

Ah, il y a beaucoup de choses là-dedans. Principalement les types de bougies et les règles. C'est compliqué ;))

C'est compliqué pour certains et pas pour d'autres. Mais c'est à vous de faire le tri maintenant.

Un conseil. Commencez à zéro. Ajoutez progressivement les objets nécessaires au code et voyez ce qui se passe dans la sortie - si lorsque vous changez la TF ou après recompilation, vous obtenez un message dans le journal concernant les objets non supprimés et les fuites de mémoire, alors corrigez le problème. Ensuite - ajouter à nouveau une fonctionnalité permettant de vérifier le stockage, l'utilisation et la suppression corrects de tous les objets. Vous devez les supprimer vous-même si vous les créez avec new.

 
Konstantin Nikitin:

Vous ne créez pas un nouvel objet à chaque tic, n'est-ce pas ? C'est possible (mais pas toujours raisonnable à mon avis), mais il est probablement plus raisonnable de dégonfler l'objet dès que vous avez fini de travailler avec lui. C'est la seule explication qui me vient à l'esprit.

Sur chaque bougie.

 
Juer:

Sur chaque bougie.

Si vous n'avez pas besoin des objets précédents, cela vaut la peine de les supprimer immédiatement.

 
Konstantin Nikitin:

Eh bien, si vous n'avez pas besoin des objets précédents, vous devriez les supprimer immédiatement.

Oui, c'est ça le truc. C'est tellement confus, les objets sont dans d'autres objets et ce n'est pas si facile de les supprimer déjà. Certains objets dépendent d'autres, et ceux-là de troisièmes objets qui dépendent des premiers :)

La vie est si compliquée :(

 
Juer:

Oui, c'est ça le truc. C'est tellement confus, les objets sont dans d'autres objets et ce n'est pas si facile de les supprimer déjà. Certains objets dépendent d'autres, et ceux-là de troisièmes objets qui dépendent des premiers :)

La vie est si compliquée :(

Vous avez tout mélangé. Une mauvaise planification de la tâche est précisément ce qui entraîne de telles conséquences.

Si des objets sont créés dans une classe, celle-ci doit les supprimer dans son destructeur lorsqu'elle termine. Les autres classes doivent vérifier si l'objet est valide avant d'obtenir un pointeur sur lui. Et en principe, il ne devrait pas y avoir une telle relation entre les deux. C'est un peu un enchevêtrement. Compliqué n'est pas synonyme de qualité. Tout doit être transparent et traçable. D'abord et avant tout - pour vous.