![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Montrez-moi un exemple pour qu'il n'y ait pas de confusion, puis je répondrai.
Un exemple est simple. Supposons que 15 "cycles informatiques" soient consacrés à l'initialisation automatique du membre a1.strA. J'en suis arrivé à la conclusion préliminaire que 15 cycles sont également consacrés à l'initialisation du membre b1.strB. Est-ce correct ?
Dans la classe CExpert de la bibliothèque standard, il y a ces déclarations gardées
En même temps, le constructeur de cet objet contient les chaînes suivantes
J'ai essayé de créer quelque chose de similaire dans ma classe, mais sans aucune autre initialisation (comme Init et InitXXX).
Le compilateur a tout compilé sans aucun avertissement ni aucune erreur, mais il présentait une erreur critique 281 (Accès invalide au pointeur) et l'EA a été supprimé du tableau.
À cet égard, j'ai quelques questions :
1. Que dois-je faire dans le constructeur (spécifier NULL ou spécifier le pointeur vers l'objet spécifique) ?
2. L'initialisation du pointeur de type InitTrade est-elle obligatoire ?
Dans la classe CExpert de la bibliothèque standard, on trouve les déclarations protégées suivantes
En même temps, le constructeur de cet objet contient les chaînes suivantes
J'ai essayé de créer quelque chose de similaire dans ma classe, mais sans aucune autre initialisation (comme Init et InitXXX).
Le compilateur a tout compilé sans aucun avertissement ni aucune erreur, mais lorsque j'ai essayé d'installer l'EA sur le graphique, il a obtenu une erreur critique 281 (accès au pointeur non valide) et l'EA a été supprimé du graphique.
À cet égard, j'ai quelques questions :
1. Que dois-je faire dans le constructeur (spécifier NULL ou spécifier le pointeur vers l'objet spécifique) ?
2. L'initialisation du pointeur de type InitTrade est-elle obligatoire ?
1. Les deux sont corrects. Tout dépend de l'implémentation particulière de la classe (pas spécifiquement CExpert). Cependant, il est préférable de créer des objets dynamiques avec la méthode InitXXX, qui renvoie un bool (car le constructeur ne renvoie pas le résultat de l'exécution et vous devrez réinitialiser le drapeau d'initialisation et ensuite l'analyser (le drapeau).
2. Bien sûr qu'elle l'est. Sinon, l'erreur critique 281 (Accès au pointeur non valide) se produira.
PS. Merci au passage. Je vais devoir insérer des contrôles de pointeurs avant utilisation.
Un exemple est simple. Supposons que 15 "cycles informatiques" soient consacrés à l'initialisation automatique du membre a1.strA. J'en suis arrivé à la conclusion préliminaire que 15 cycles sont également consacrés à l'initialisation du membre b1.strB. Est-ce correct ?
Non, ce n'est pas du tout à propos de l'horloge. Enfin, pas vraiment à propos de l'horloge.
OK, alors une question très simple : lequel est le plus rapide à initialiser dans le temps, le membre a1.strA ou le membre b1.strB de l'exemple ci-dessus ?
Ou quoi lire "point par point" ? Physiquement, il n'y a aucun moyen d'apprendre la programmation au niveau d'une "machine-processeur".
OK, alors une question très simple : lequel est le plus rapide à initialiser dans le temps, le membre a1.strA ou le membre b1.strB de l'exemple ci-dessus ?
Ou quoi lire "point par point" ? Il n'y a physiquement aucun moyen d'apprendre la programmation à un niveau "machine-processeur".
a1.strA s'initialisera plus rapidement car son processus d'initialisation consiste simplement à mettre à zéro sur place. Pour b1.strB, une allocation de mémoire sera effectuée.
Toutefois, cette différence est assez difficile à mesurer, car elle est bien inférieure à un pour cent, compte tenu du code entourant l'initialisation
qui initialise plus rapidement
Pour b1.strB, une allocation de mémoire sera effectuée.
Voilà, merci - le chaînon manquant dans ma logique.
TheXpert, merci pour votre aide. J'ai essayé d'expliquer le point avec mes propres mots. Je suis d'accord pour dire qu'une question vraiment correcte est posée par ceux qui sont au courant. Mais ils ne posent généralement pas de questions de mon niveau :)
1. Il est correct dans les deux sens. Tout dépend de l'implémentation spécifique de la classe (pas spécifiquement CExpert). Cependant, il est préférable de créer des objets dynamiques dans la méthode InitXXX, qui renvoie un bool (car le constructeur ne renvoie pas le résultat de l'exécution et nous devrons réinitialiser/désactiver le drapeau d'initialisation et ensuite l'analyser (le drapeau).
2. Bien sûr que oui. Sinon, erreur critique 281 (accès au pointeur non valide).
PS. Merci au passage. Je vais devoir insérer des contrôles de pointeurs avant utilisation.
Merci, maintenant tout est à sa place. Cependant, il y a une autre question. Supposons que l'erreur 281 se produise, mais il est préférable que l'Expert Advisor ne soit pas déchargé. Que dois-je faire ?
Permettez-moi de clarifier ma question - Que faire si une erreur de 281 se produit après toutes les étapes de l'initialisation, mais qu'elle n'affecte pas le travail principal du conseiller expert de manière suffisamment critique pour ne pas l'exécuter du tout ?
Supposons que l'erreur 281 se produise, mais qu'il est souhaitable que l'EA ne soit pas déchargée. Que devons-nous faire alors ?
Permettez-moi de clarifier ma question : Que faire si l'erreur 281 se produit après toutes les étapes de l'initialisation, mais qu'elle n'affecte pas le travail principal du conseiller expert de manière suffisamment critique pour ne pas l'exécuter du tout ?
"Accès à un pointeur non valide" =="Tentative d'accès à un pointeur non valide" ? Si oui, alors
Une tentative d'accès à un pointeur invalide provoque un plantage du programme. C'est pourquoi il est nécessaire d'utiliser la fonction CheckPointer() avant d'utiliser un pointeur. Un pointeur peut être invalide dans les cas suivants