Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 596

 
Juer:

Also gut. Lassen Sie mich diese in OnDeinit() löschen. Aber jetzt habe ich einen Speicherplatzmangel-Fehler, der bereits beim Testen auftaucht... Das heißt, es wird nicht zu OnDeinit() gelangen.

Sie werden also eine Reihe von Doppelobjekten erstellen. Dann wird alles zum Teufel gehen und Sie werden das Ende nicht mehr finden können.

 
Artyom Trishkin:

Sie erstellen also einen Haufen doppelter Objekte. Dann ist die ganze Sache verloren und Sie können das Ende nicht mehr finden.

Wie kann ich genau wissen, wo ich keine Objekte lösche? Es ist ein großes Programm :)

 
Juer:

Wie kann ich genau wissen, wo ich keine Objekte lösche? Es ist ein großes Programm :)

Sie sollten zunächst herausfinden, wo und wie Sie einen solchen Haufen angelegt haben. Wenn ich mich recht erinnere, haben Sie etwa zehntausend davon? Was sind sie? Objekte der historischen Daten? Oder welche Art von Objekten haben so viele davon? Eine Reihe von Objekten - von was?

 
Artyom Trishkin:

Sie sollten zunächst herausfinden, wo und wie Sie einen solchen Haufen gemacht haben. Wenn ich mich recht erinnere, haben Sie dort Zehntausende davon, nicht wahr? Was sind sie? Objekte der historischen Daten? Oder welche Art von Objekten haben so viele davon? Eine Reihe von Objekten - von was?

ach, da ist eine Menge Zeug drin. Vor allem Kerzenarten und Regeln. Es ist kompliziert ))

 
Juer:

Wie kann ich genau wissen, wo ich keine Objekte lösche? Es ist ein großes Programm :)

Sie erstellen nicht bei jedem Tick ein neues Objekt. Natürlich ist es möglich (aber meiner Meinung nach nicht immer sinnvoll), aber es muss sinnvoller sein, die Luft sofort nach Beendigung der Arbeit am Objekt abzulassen. Das ist die einzige Erklärung, die ich mir vorstellen kann.

 
Juer:

ach, da ist eine Menge Zeug drin. Vor allem Kerzenarten und Regeln. Es ist kompliziert ))

Für die einen ist es kompliziert, für die anderen nicht. Aber es liegt jetzt an Ihnen, das zu klären.

Ein Ratschlag. Fangen Sie ganz von vorne an. Fügen Sie nach und nach die benötigten Objekte zum Code hinzu und beobachten Sie, was in der Ausgabe passiert - wenn Sie beim Ändern der TF oder nach dem Neukompilieren eine Meldung im Protokoll über nicht entfernte Objekte und Speicherlecks erhalten, dann beheben Sie das Problem. Als Nächstes fügen Sie erneut eine Funktion zur Überprüfung der korrekten Speicherung, Verwendung und Löschung aller Objekte hinzu. Sie müssen sie selbst löschen, wenn Sie sie mit neu erstellen.

 
Konstantin Nikitin:

Sie erstellen nicht bei jedem Tick ein neues Objekt. Es ist möglich (aber meiner Meinung nach nicht immer sinnvoll), aber es ist wahrscheinlich sinnvoller, die Luft aus dem Objekt zu lassen, sobald Sie die Arbeit damit beendet haben. Das ist die einzige Erklärung, die mir einfällt.

Auf jeder Kerze.

 
Juer:

Auf jeder Kerze.

Wenn Sie die bisherigen Objekte nicht mehr benötigen, sollten Sie sie sofort entfernen.

 
Konstantin Nikitin:

Wenn Sie die bisherigen Objekte nicht mehr benötigen, sollten Sie sie sofort löschen.

Ja, das ist die Sache. Es ist so verwirrend, die Objekte sind in anderen Objekten und es ist nicht so einfach, sie zu löschen. Einige Objekte hängen von anderen ab, und diese von dritten Objekten, die von den ersten abhängen :)

Das Leben ist so kompliziert :(

 
Juer:

Ja, das ist die Sache. Es ist so verwirrend, die Objekte sind in anderen Objekten und es ist nicht so einfach, sie zu löschen. Einige Objekte hängen von anderen ab, und diese von dritten Objekten, die von den ersten abhängen :)

Das Leben ist so kompliziert :(

Du bringst das alles durcheinander. Eine fehlerhafte Planung der Aufgabe ist genau das, was zu solchen Folgen führt.

Wenn Objekte in einer Klasse erstellt werden, muss die Klasse sie in ihrem Destruktor löschen, wenn sie fertig ist. Andere Klassen müssen prüfen, ob das Objekt gültig ist, bevor sie einen Zeiger darauf erhalten. Und im Prinzip sollte es eine solche Verflechtung nicht geben. Es ist ein bisschen verwirrend. Kompliziert ist nicht gleichbedeutend mit Qualität. Alles sollte transparent und nachvollziehbar sein. In erster Linie - für Sie.

Grund der Beschwerde: