Fehler, Irrtümer, Fragen - Seite 1816
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
Ich bin auf ein (meiner Meinung nach) falsches Verhalten von Objektzeigern gestoßen.
Es sieht wie ein MQL-Fehler aus.
Sie haben den Fehler. Wie stellen Sie sich vor, einem Nachkommen einen leeren Elternteil zuzuweisen?
Es sieht wie ein MQL-Fehler aus.
Sie haben den Fehler. Wie stellen Sie sich vor, einem Nachkommen einen leeren Elternteil zuzuweisen?
Genau dasselbe wie nicht-leer. In baseObj1 befindet sich ein Zeiger auf ein Objekt der Klasse descendant. Wenn Sie delete(obj1) entfernen, verursacht die Zuweisung in der letzten Zeile keine Probleme - die Zeigertypen stimmen überein. Ich denke, die Zuweisung muss auf die gleiche Weise erfolgen, wenn das Objekt, auf das sich der Zeiger bezieht, gelöscht wird. Und es darf kein Fehler "Ungültiger Zeigerzugriff" auftreten, da nicht versucht wird, auf ein gelöschtes Objekt zuzugreifen.
Hier ist dieser Teil des Codes.
Offenbar wird geprüft, ob der Typ des Objekts, auf das baseObj1 verweist, mit dem Typ des Zeigers obj2 übereinstimmt. Hier gibt es zwei Möglichkeiten:
1) Der Zeiger selbst kann eine komplexe Struktur sein, die den Typ des Objekts enthält
2) Wir müssen uns auf das Objekt beziehen, um seinen Typ herauszufinden.
Dies scheint Fall Nr. 2 zu sein, und wir werden damit leben müssen. Danke für die Leitfragen )
Kaspersky schreit schon seit einer Woche auf dem Terminal und versucht, ein Update durchzuführen.
Dieser Teil Ihres Codes
Dasselbe wie hier.
class B : public A {};
class C : public B {};
void OnStart()
{
B *b = new B;
delete b;
B *c = b;
b = new C;
A *a = c;
Print( a, ":", b, ":", c );
}
Genau wie hier.
class B : public A {};
void OnStart()
{
B *b1 = new B;
A *a = b1;
delete b1;
B *b2 = b1;
b1 = new B; //уже другой объект
a = b2; //
Print( a, ":", b1, ":", b2 );
}
Kaspersky schreit schon seit einer Woche auf dem Terminal und versucht, ein Update durchzuführen.
Entwarnung, Build 1545. auch Kaspersky sagt Entwarnung
https://www.virustotal.com/ru/file/2c3bf04666714cfac26e6e1c0fe355c6081554a0c2a15434849b0a5c241c95b0/analysis/1487685060/