Fehler, Irrtümer, Fragen - Seite 2243
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Der Code im mql4-Indikator funktioniert nicht mehr. Wie kann ich ihn reparieren?
Editor sagt 'ObjectSetInteger' - keine der Überladungen kann auf den Funktionsaufruf angewendet werden
Es hat jahrelang funktioniert und dann plötzlich aufgehört. Das ist eine Schande.
Aber warum haben Sie zwei Stile miteinander vermischt? Wenn Sie in der ersten Zeile den Pfeilcode angeben, verwenden Sie in der zweiten Zeile den gleichen Stil:
Ich habe versucht, eine neue Version des Indikators auf den Markt zu bringen. Der Test endete mit Fehlern. Fehlermeldung wie auf dem Bild im Anhang mit folgendem Inhalt:
Vielleicht liegt das Problem im Tester?Aber warum haben Sie die beiden Stile vermischt? Wenn Sie die erste Zeile für den Pfeilcode verwenden, dann verwenden Sie die zweite Zeile im gleichen Stil:
Danke, das hat geholfen.
Zwei Stile? Ich wusste nichts von den Stilen. Es ist nur so, dass man diesen Abschnitt bisher nur auf diese Weise machen konnte. Es hat sich eine Veränderung ergeben. Ich programmiere seit mehr als 10 Jahren in MQL4. Und jetzt haben die Entwickler die Sprache geändert und viele meiner Codes funktionieren nicht mehr. Ich bin sehr enttäuscht. Die Veränderungen waren nicht zum Besseren. Das bedeutet, dass ich eine große Menge an Codes neu erstellen muss. Auch wenn sie alt sind, wurden sie viel benutzt.
Ich habe versucht, eine neue Version des Indikators auf den Markt zu bringen. Der Test endete mit Fehlern. Fehlerbericht wie in der Abbildung im Anhang dargestellt mit folgendem Inhalt:
Vielleicht liegt das Problem beim Tester?Bitte stellen Sie eine Anfrage an servicedesk, wir werden es herausfinden
UPD: Ich habe Ihre Anfrage gefunden.
Gibt den Puffer eines beliebigen dynamischen Arrays frei und setzt die Größe der Null-Dimension auf 0.
Wenn Skripte und Indikatoren geschrieben werden, kann die Notwendigkeit, die Funktion ArrayFree() zu verwenden, selten auftreten, da der gesamte verwendete Speicher sofort freigegeben wird, und in benutzerdefinierten Indikatoren wird die Hauptarbeit mit Arrays durch den Zugriff auf Indikatorpuffer repräsentiert, deren Größe automatisch durch das Exekutivsubsystem des Terminals verwaltet wird.
Wenn Sie in Ihrem Programm Speicher unter komplexen dynamischen Bedingungen verwalten müssen, können Sie mit der Funktion ArrayFree() den von einem dynamischen Array belegten Speicher, der nicht mehr benötigt wird, explizit und sofort freigeben.
Siehst du? Unnötig.
Natürlich kann niemand für den Inhalt des Arrays garantieren, wenn der Speicher erst einmal freigegeben wurde und Sie ihn dann erneut zuweisen, indem Sie dem Array eine Größe zuweisen.
Array-Initialisierung verwenden: ArrayInitialize()
Was meinen Sie damit, dass niemand für den Inhalt garantiert? Wenn der Speicher freigegeben wurde, ist er weg, wie kann man also Müll hineinbringen? Oder bedeutet das Löschen des Speichers, dass die Erlaubnis erteilt wird, dass dieser Speicher von einem anderen Teil des Programms verwendet werden kann, und nicht, dass er überhaupt gelöscht wird?
Was meinen Sie damit, dass niemand für den Inhalt garantiert? Wenn der Speicher gelöscht wurde, ist er nicht mehr vorhanden, wie kommt dann der Müll in den Speicher? Oder bedeutet das Löschen des Speichers, dass man die Erlaubnis gibt, dass dieser Speicher von einem anderen Teil des Programms verwendet werden kann, und nicht, dass er überhaupt gelöscht wird?
ArrayResize räumt den Speicher nicht auf, weshalb er Müll enthält, der vom vorherigen "Verbraucher" stammt.
Dies geschieht aus Geschwindigkeitsgründen, denn nachdem einem Array Speicher zugewiesen wurde, wird der Benutzer es in 99,99(9)% der Fälle mit seinen Daten "füllen".
Danke, das hat geholfen.
Zwei Stile? Ich wusste nichts von den Stilen. Es ist nur so, dass man diesen Abschnitt bisher nur auf diese Weise machen konnte. Es hat sich eine Veränderung ergeben. Ich programmiere seit mehr als 10 Jahren in MQL4. Und jetzt haben die Entwickler die Sprache geändert und viele meiner Codes funktionieren nicht mehr. Ich bin sehr enttäuscht. Die Veränderungen waren nicht zum Besseren. Das bedeutet, dass ich eine große Menge an Codes neu erstellen muss. Sie mögen alt sein, aber sie waren eine ganze Wagenladung nützlicher.
Wurde der Pfeilcode nicht auf diese Weise festgelegt, bevor die mql4 ObjectSetXXX-Funktionen eingeführt wurden?
Ich habe auch in mql für etwa 10 Jahre (vielleicht mehr - wie die Zeit vergeht ...) schreiben - ich beginne zu vergessen, streng Quaternary Funktionen - ich schreibe Multiplattform-Code, wenn möglich.
ArrayResize löscht den Speicher nicht, deshalb enthält er Müll vom vorherigen "Verbraucher".
Dies geschieht aus Geschwindigkeitsgründen, denn nach der Zuweisung von Speicher an ein Array wird der Benutzer dieses in 99,99(9)% der Fälle mit seinen Daten "füllen".
Warum sind dann die numerischen Werte auch nach einem Neustart des Terminals Konstanten, die "Unsinn" sind?
Ich persönlich bin bei der einfachen Summierung der Inhalte von Zellen in einem anderen Array hängen geblieben und habe lange über das Problem gegrübelt.
Warum sind dann die numerischen Werte auch nach einem Neustart des Terminals Konstanten, die "Unsinn" sind?
Ich persönlich habe mich an einer einfachen Summierung der Inhalte der Zellen eines anderen Arrays verbrannt und habe mich lange Zeit gefragt, was falsch war.
Es spielt keine Rolle, welche Art von Daten in dem nicht initialisierten Array enthalten ist, die Daten können sich jederzeit ändern, niemand garantiert ihren Wert.
Deshalb führt die Verwendung von nicht initialisierten Variablen (Speicher auslesen) manchmal zu Situationen, in denen es sehr lange dauert, die Ursache zu finden:
Ich kann nur einige Ratschläge geben.
Sie sollten sich angewöhnen, Daten immer zu initialisieren, damit Sie in Zukunft nicht viel Zeit mit der Suche nach Fehlern im Zusammenhang mit der fehlenden Initialisierung verschwenden.
Was meinen Sie damit, dass niemand für den Inhalt garantiert? Wenn der Speicher gelöscht wurde, ist er nicht mehr vorhanden, wie kommt dann der Müll in den Speicher? Oder bedeutet das Löschen des Speichers, dass man die Erlaubnis gibt, dass dieser Speicher von einem anderen Teil des Programms verwendet werden kann, und nicht, dass er überhaupt gelöscht wird?
Was meinen Sie mit "nein"? Sie entfernen den Speicherstick nicht aus dem Steckplatz der Hauptplatine. Und wenn der Speicher vorhanden ist und freigegeben wird (nicht mit einem Wert initialisiert, sondern freigegeben), dann wird er für andere Programmbedürfnisse verwendet.