AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 6 -> Delphi 10.2

Ein Thema von Temi00 · begonnen am 4. Apr 2018 · letzter Beitrag vom 6. Apr 2018
Antwort Antwort
Seite 1 von 2  1 2      
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#1

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 07:18
Ich befrage mal die Glaskugel:

Die Exception passiert durch den Aufruf von Current := Children[i]; und zwar deswegen, weil es die erste Stelle in der Funktion ist, die auf eine Instanz-Daten deiner Klasse zugreift. Leider ist deine Instanz (vom Typ TZSymbolNode) nicht initzialisiert.

Suche also die Stelle wo deine Instanz erstellt werden sollte.

Erster Versuch: Wenn du im Debugger an der Stelle ankommst, gehe den Aufrufstack Schritt für Schritt hoch.

Zweiter Versuch: Suche nach Stelllen TZSymbolNode.Create . Vielleich findest du so was wie:

Delphi-Quellcode:
var
  node: TZSymbolNode;
begin
  if xxx then
    node: TZSymbolNode.Create;
    node.FindChildWithChar(); // hier ist node evtl. nicht Initzialisiert
end;
Dritter Versuch: Nimm FastMM zu Hilfe.
  Mit Zitat antworten Zitat
Temi00

Registriert seit: 1. Aug 2004
9 Beiträge
 
#2

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 13:50
Hallo Forum,
nein als Zielplattform ist weiter 32bit eingestellt.

Ich habe ja in den Zeos sourcen überhaupt nichts geändert.

Kenne leider die Objectorientierte Programmierung nicht (Hab bisher meist PHP funktionale Programmierung - allerhöchstens objectbasiert aber nicht objectorientiert programmiert)

Delphi-Quellcode:
function TZSymbolNode.FindChildWithChar(Value: Char): TZSymbolNode;
var
  I: Integer;
  Current: TZSymbolNode;
begin
  Result := nil;
  for I := 0 to 255 do
  begin
    Current := Children[I]; <-------
    if (Current = nil) or (Current.Character = Value) then
    begin
      Result := Current;
      Break;
    end;
  end;
end;
Woher kommt den die Variable Children? Ist das eine globale Variable? Ich denke nicht muß wohl was wie Childs vom Objekt TZSymbolNode sein?
Ja laut Debugger sind da 256 member(?) von Children nil

Ich suche jetzt also wie vorgeschlagen nach

TZSymbolNode.Create

Delphi-Quellcode:

// also finde ich hier

constructor TZSymbolNode.Create(Parent: TZSymbolNode; Character: Char);
begin
  FParent := Parent;
  FCharacter := Character;
  FValid := False;
  SetLength(FChildren, 256);
end;

// und hier


constructor TZSymbolRootNode.Create;
var
  I: Integer;
begin
  inherited Create(nil, #0);

  for I := 0 to 255 do
  begin
    FChildren[I] := TZSymbolNode.Create(Self, Chr(I));
    FChildren[I].Valid := True;
  end;
end;
wenn man den Aufrufstack anschaut (siehe Anhang) kann man vieleicht das ganze verkürzen? den wie gesagt am Quellcode der Zeos Komponenten habe ich nichts geändert.

sorry für die blutigen Anfängerfragen.

Geändert von Temi00 ( 5. Apr 2018 um 13:54 Uhr) Grund: Anhang vergessen ;)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 15:50
Ist einstellbar

http://docwiki.embarcadero.com/RADSt...iler-Direktive)
Markus Kinzler
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 16:13
Irrtum (meinerseits).


Geändert von MichaelT ( 5. Apr 2018 um 17:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#5

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 16:36


Bei der verkürzten Auswertung bricht der Programmfluss ab, sobald klar ist, dass der gesamte boolsche Ausdruck wahr ist.

Bei deinem Beispiel ist doch der erste Operand des or-Vergleichs False und er kann die Auswertung nicht abbrechen, weil er auf jeden Fall noch den zweiten Operand auswerten muss um zu sehen ob dieser den Gesamtausdruck wahr macht...
wenn der erste Vergleich stattdessen True ergeben würde, dann würde der zweite Vergleich nicht mehr durchgeführt werden.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 16:39
Hast du recht. Delphi bricht tatsächlich ab. Ich bin davon ausgegangen, dass das Pragma funktioniert. Da ließ ich mich verwirren. Sorry.



Bei der verkürzten Auswertung bricht der Programmfluss ab, sobald klar ist, dass der gesamte boolsche Ausdruck wahr ist.

Bei deinem Beispiel ist doch der erste Operand des or-Vergleichs False und er kann die Auswertung nicht abbrechen, weil er auf jeden Fall noch den zweiten Operand auswerten muss um zu sehen ob dieser den Gesamtausdruck wahr macht...
wenn der erste Vergleich stattdessen True ergeben würde, dann würde der zweite Vergleich nicht mehr durchgeführt werden.

Geändert von MichaelT ( 5. Apr 2018 um 16:57 Uhr)
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 17:21
Ich hatte keinen Clean gemacht. Deswegen war ich auch überrascht.

Wenn der besagte Fehler auftritt, dann müsste man mal in die Projektoptionen schauen. Und hernach Clean und Build, zumindest zur Vorsicht.

Ändert aber nix dran dass der Code ein wenig seltsam ist.



Bei der verkürzten Auswertung bricht der Programmfluss ab, sobald klar ist, dass der gesamte boolsche Ausdruck wahr ist.

Bei deinem Beispiel ist doch der erste Operand des or-Vergleichs False und er kann die Auswertung nicht abbrechen, weil er auf jeden Fall noch den zweiten Operand auswerten muss um zu sehen ob dieser den Gesamtausdruck wahr macht...
wenn der erste Vergleich stattdessen True ergeben würde, dann würde der zweite Vergleich nicht mehr durchgeführt werden.
  Mit Zitat antworten Zitat
Temi00

Registriert seit: 1. Aug 2004
9 Beiträge
 
#8

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 15:52

In Delphi ist im Gegensatz zu Pascal die Kurzschlussauswertung allein am AND definiert und nicht am OR
ist zwar off topic aber IMHO muss man beim AND immer beide Ausdrücke auswerten beim OR kann auch wegoptimiert werden. Unwahrscheinlich dass das bei Pascal anders war. Just my 2 cents
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 16:01
Nein. Ein Nuller genügt beim AND. Nur T AND T is T. Ist bei OR nicht anders.

Geändert von MichaelT ( 5. Apr 2018 um 18:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.360 Beiträge
 
Delphi 12 Athens
 
#10

AW: Delphi 6 -> Delphi 10.2

  Alt 5. Apr 2018, 18:44
ist zwar off topic aber IMHO muss man beim AND immer beide Ausdrücke auswerten beim OR kann auch wegoptimiert werden. Unwahrscheinlich dass das bei Pascal anders war. Just my 2 cents
Nein.

Mit der standardmäßigen kurzen Auswertung:
Bei OR wird der zweite nur ausgewertet, wenn der erste FALSE ist
Bei AND wird der zweite nur ausgewertet, wenn der erste TURE ist

Ansonsten steht das Ergebnis ja schon fest und Delphi spart sich die weitere Auswertung.
false AND irgendwas = false
true OR irgendwas = true

Darum kann man in Delphi standardmäßig auch sowas machen
if Assigned(irgendwas) and irgendwas.wasanderes then Bei anderen Sprachen, die immer voll auswerten, oder wo die Auswertereihenfolge sich ändern kann, da geht das nicht.
z.B. in einigen DBMS (SQL), wo immer vollständig ausgewertet wird und wo der Queryplaner nach Gutdünken die Auswertung umdrehen kann.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Apr 2018 um 18:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz