Der Grund für das Überschreiten der Grenzen liegt darin, dass Arrays in verschiedenen Funktionen nach und nach mit Werten gefüllt werden, und bei diesem Prozess wird auf eine Zelle über eine andere Zelle zugegriffen. Einige Funktionen werden zweimal aufgerufen und füllen das Array nacheinander. Befindet sich jedoch Müll in den Zellen, kommt es bei der ersten Befüllung zu einer Überschreitung.
Ich schätze, das Problem kann gelöst werden, indem die Arrays im Voraus gelöscht werden, aber natürlich ist dies ein zusätzliches Kopfzerbrechen. Schade.
Gewöhnen Sie sich daran.
Ich deklariere immer ein Array, lege die erwartete Größe fest und fülle es mit Werten (initialisiere es). Es ist oft besser, mit einem Wert ungleich Null zu initialisieren - so ist es einfacher, einen Fehler zu finden.
Ich habe noch nie ernsthaft mit MT5 gearbeitet, und jetzt übertrage ich ein großes Projekt auf einmal darauf. Natürlich gibt es Schwierigkeiten, eine davon ist das ständige Verlassen des Bereichs. MT4 hatte dieses Problem nicht, wie sich herausstellte, auch weil die Felder nach der Ankündigung nicht absichtlich geleert werden mussten. Im MT5 ist dies jedoch notwendig. Meine Technologie erfordert eine allmähliche Füllung des Kerns und eine Veränderung seiner Größe. Die genaue Größe einiger Arrays ist nicht im Voraus bekannt. Gleichzeitig wäre wegen der vielen Schleifen auf den Feldern, die gerade gefüllt werden, alles durcheinander. Wäre kein Müll in den Zellen, hätte alles schon längst funktioniert.
Das heißt, es gibt einerseits Müll in Arrays und andererseits kritische Fehler bei Überschreitungen. Es ist wie eine drakonische Bedingung...
Ich möchte verstehen, warum sie die automatische Löschung von Arrays entfernen und deklarierte Variablen auf Null reduzieren mussten, wie in MT4?
Wenn wir Variablen tolerieren können, werden wir mit dem Problem der ständigen Müllsammlung in großen Arrays konfrontiert, und wir müssen sie nicht nur bei der Deklaration, sondern auch bei der Größenänderung bereinigen... Warum?
Auch er stieß anfangs auf ähnliche Schwierigkeiten.
Meiner Meinung nach werden Arrays auf eine bestimmte Art und Weise gefüllt, dies sollte in Schleifen oft berücksichtigt werden.
Peter, ich weiß nicht, was du meinst?
alle über dieselbehttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
jetzt ist es die Schuld von MQL5... ;)
- 2019.02.28
- www.mql5.com
alle über dieselbehttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
jetzt ist es die Schuld von MQL5... ;)
Ja. Ich bin nicht an MQL4 gewöhnt.
Nikolay, machen Sie sich keine Sorgen über MQL4, dort ist alles in Ordnung. Der Themenstarter füllt die Felder nach Belieben. Das war's.
Nun, ja. Ich bin nicht an MQL4 gewöhnt.
Natürlich wissen Sie das.
Ein Programmierer, der sich selbst und seine Programme respektiert, wird keine Fehler machen. In MQL4, wenn Sie #property strict nicht verwenden, können Sie sich auf ein Array mit der Größe 10 mit dem Index 20 beziehen. Und es passiert nichts - das Programm funktioniert weiter, aber es ist Sache des Programmierers zu entscheiden, was er als nächstes verwenden will. Wenn er klug ist, wird er sicherlich alles überprüfen und kontrollieren, um keine Werte außerhalb des Feldes zu erhalten, aber wenn er es "grob" macht, denkt er nicht an eine solche Kontrolle, und "die Hauptsache ist, dass es funktioniert, aber wie es funktioniert - irgendwie...".
Die meisten Benutzer, die sich nicht damit befasst haben, beschweren sich über "schlechtes, böses und kompliziertes MQL5", weil es ihnen nicht mehr erlaubt, ihre eigenen Kreationen zu fälschen wie früher. Aber diejenigen, die ursprünglich dachten und Code mit Überprüfungen und Kontrolle der empfangenen Daten erstellten, bemerkten keinen Unterschied in der Komplexität der Sprachen und fragen sich nun - "wo ist die Komplexität - es ist die gleiche...".
Ich habe noch nie ernsthaft mit MT5 gearbeitet, und jetzt übertrage ich ein großes Projekt auf einmal darauf.
Schwerwiegender Unterschied bei Arrays beim Umschreiben
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Merkmale der Sprache mql4, Feinheiten und Tricks
fxsaber, 2019.02.12 13:12
Eigenschaften von ArrayResize für mehrdimensionale Arraysvoid OnStart() { int Array[][2]; Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14 Print(ArraySize(Array)); // 14 }
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Ich habe noch nie ernsthaft mit MT5 gearbeitet, und jetzt übertrage ich ein großes Projekt auf einmal darauf. Natürlich gibt es dabei Schwierigkeiten, eine davon ist, dass das Feld immer außerhalb der Reichweite liegt. MT4 hatte dieses Problem nicht, wie sich herausstellte, auch weil die Felder nach der Ankündigung nicht absichtlich geleert werden mussten. Im MT5 ist dies jedoch notwendig. Meine Technologie erfordert eine allmähliche Füllung des Kerns und eine Veränderung seiner Größe. Die genaue Größe einiger Arrays ist nicht im Voraus bekannt. Gleichzeitig wäre wegen der vielen Schleifen auf den Feldern, die gerade gefüllt werden, alles durcheinander. Wäre kein Müll in den Zellen, hätte alles schon längst funktioniert.
Das heißt, es gibt einerseits Müll in Arrays und andererseits kritische Fehler bei Überschreitungen. Es ist wie eine drakonische Bedingung...
Ich möchte verstehen, warum sie die automatische Löschung von Arrays entfernen und deklarierte Variablen auf Null reduzieren mussten, wie in MT4?
Wenn wir Variablen tolerieren können, werden wir mit dem Problem der ständigen Müllsammlung in großen Arrays konfrontiert, und wir müssen sie nicht nur bei der Deklaration, sondern auch bei der Größenänderung bereinigen... Warum?