AGB  ·  Datenschutz  ·  Impressum  







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

Befehlszeile ausführen

Ein Thema von Landogar-Garuno · begonnen am 1. Dez 2010 · letzter Beitrag vom 1. Dez 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 09:42
Ich verstehe nicht, auf welchen Code-Teil Du Dich beziehst. Wo wird nach einem Fehler einfach weitergemacht? Bin ich blind?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#12

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 09:59
@ Himitsu
Im Prinzip gebe ich Dir ja Recht, dass man mögliche Fehler mit try finally abfangen sollte, bei dem von Dir jetzt genannten Beispiel bin ich ganz bei Dir.
Bei einem tstringlist.create erscheint es mir nicht sinnvoll

@deddyh
Wenn vorher nicht nil zugewiesen wird, kann das nur zu Problemen führen, wenn tstringlist.create eine Exception liefert. Und den Fall zu berücksichtigen und irgendwie abzufangen ist eben meiner Meinung nach unnötig, weil das Programm dann nichts sinnvolles mehr produzieren kann, wenn es weiterläuft.

Ich würde es so machen:

Delphi-Quellcode:
output := TStringList.Create;
errors := TStringList.Create;
try
  ...
finally
  output.free;
  errors.free;
end;
Wenn das Erstellen der Stringlist eine Exception liefert, dann geht ohnehin nichts mehr. Und dann wird gleich die richtige Exception angezeigt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 10:01
Wenn schon ein tstringlist.create abstürzt, wird es sowieso bei nächster Gelegenheit knallen. Derartige Fehler abfangen und weitermachen, als wäre nichts gewesen, bringt doch gar nichts.
Nicht?
Es kann doch zufällig danach noch was freigegeben werden und dann paßt es wieder.

Delphi-Quellcode:
errors := nil;
output := GetMem(1000000000); // grade noch genug
try
  errors := GetMem(100); // das war jetzt zuviel
  ...
finally
  FreeMem(errors); // hier könnte es ohne :=nil nochmals knallen
  FreeMem(output);
end;
Jetzt könnte es ab dem nächten Except (von einem Try-Except) weitergehn, da wieder genug Speicher frei ist.
Ohne das :=nil könnte es aber passieren, daß es beim FreeMem(errors) nochmal knallt, dabei die ursprüngliche Fehlerursache/-adresse verfälscht und FreeMem(output) ganicht mehr ausgeführt wird.

du siehst ... ohne das :=nil wird es nur schlimmer und mit kann es besser werden



[add]
Zitat:
Delphi-Quellcode:
output := TStringList.Create;
errors := TStringList.Create;
try
  ...
finally
  output.free;
  errors.free;
end;
bitte nicht ... wenn es hier bei errors knallt, dann wird output nicht freigegeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#14

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 10:26
Du liegst falsch. Free prüft intern auf nil ab, so dass nil-Objekte nicht zerstört werden, es folglich also auch nicht knallt.
Aber Säääähkunde mal. Ich denke Variablen werden in Delphi in vielen Fällen vorinitialisiert? Hier nicht? Warum? Danke.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 10:29
IIRC gilt dies nicht für lokale Variablen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#16

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 10:31
IIRC gilt dies nicht für lokale Variablen.
Aaaaah. Jetzt hat's klick gemacht. Jupp, entsinne mich jetzt. Danke.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 10:33
Sonst gäbe es die Warnung "Variable xyz ist möglicherweise nicht initialisiert worden" ja auch gar nicht, weil sinnlos
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Befehlszeile ausführen

  Alt 1. Dez 2010, 10:36
Globale Variablen (auf Heap?) werden initialisiert, da der gesamte Speicher anfangs eh null ist, welcher von Windows kommt.

Klassenfelder werden via ZeroMemory/FillMemory+0 in CreateInstance des Objekts genullt.

Lokale Variablen (auf'm Stack) werden nicht initialisiert (abgesehn von sowas wie String/Interface/DynArray, welches immer initialisiert wird)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz