AGB  ·  Datenschutz  ·  Impressum  







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

Automatische Problem-Erkennung

Ein Thema von Incocnito · begonnen am 26. Okt 2023 · letzter Beitrag vom 2. Nov 2023
Antwort Antwort
Seite 2 von 2     12   
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#11

AW: Automatische Problem-Erkennung

  Alt 30. Okt 2023, 08:22
...
Welche Delphi Version verwendest du?
Bei Delphi 7 kann ich das so produzieren, aber bei Delphi 11 kann ich hier kein Problem oder Absturz reproduzieren.
Ich nutze Delphi 10.4
  Mit Zitat antworten Zitat
skybibo

Registriert seit: 23. Jun 2008
Ort: NRW
25 Beiträge
 
Delphi 12 Athens
 
#12

AW: Automatische Problem-Erkennung

  Alt 30. Okt 2023, 20:34
Ich habe mal eine komplette Unit erstellt. In dieser Variante bekomme ich auch mit Delphi 11 einen EInvalidPointer Fehler. Was genau Delphi in der Procedure "DoSomething" macht ist für mich noch nicht so richtig nachvollziehbar. Ob diese Kombination in einem normalen Programm so vorkommen kann weiß ich nicht. Bei mir hatte ich dies noch nicht. Ich sehe hier auch bei Delphi selbst keinen Fehler. Wenn ich Unsinn programmiere, dann bekomme ich auch ein Unsinniges Ergebnis.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FMyVal: String;
  public
    procedure DoMore;
    procedure DoSomething(const sVal:String);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoMore;
  var
    Val: String;
begin
  DoSomething(FMyVal);
end;

procedure TForm1.DoSomething(const sVal: String);
  var
    Val: String;
begin
  FMyVal := ''; //ohne diese Zeile gibt es keinen Fehler
  Val := sVal;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMyVal := 'XXX'; //ohne diese Zeile gibt es keinen Fehler
  DoMore;
end;

end.
Bernd
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#13

AW: Automatische Problem-Erkennung

  Alt 2. Nov 2023, 08:33
Es ist halt in unserem Programm genau so vorgekommen und ich habe das für hier nur auf die wesentlichen Eckpunkte zusammen gekürzt.
Das der Fehler nur kommt, wenn man ihn zuvor mit einem Wert beschreibt ging aus meinem Beispiel nicht hervor, da aber der Parameter ein
const ist, war es eigentlich auch klar, dass er vorher "initialisiert" sein muss. Ist er in unserem Programm übrigens.
Ja, Delphi macht hier genau das, was es soll, es optimiert den Aufruf indem es die Referenz übergibt und nicht den Speicher kopiert.
Ja, wenn ich das const weg lasse (was wir dann auch getan haben) kopiert er den Wert wieder und es gibt keinen Fehler mehr an der Stelle.
Nein, ich hätte trotzdem gerne dass der Compiler sich beschwert, wenn eine Variable übergeben wird, per const-Ref-Dings, und diese in
der Funktion selbst beschrieben wird. Meinetwegen kann man diese Prüfung auch per Schalter aktivieren, wenn diese Zusatzprüfung zu lange dauert.
Ja, ich weiß, dass es etwas (aber meines Erachtens nach nicht so viel) aufwendiger ist, wie zu prüfen ob der Const-Paramter innerhalb der
Methode beschrieben wird. Naja, wird wohl nicht kommen, also Augen auf bei const-Parametern und nochmal 5 Minuten länger selbst nachdenken.
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
131 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Automatische Problem-Erkennung

  Alt 2. Nov 2023, 15:07
Ich kann deinen Punkt mit dem Compiler verstehen. Allerdings verstehe ich nicht, warum man der Funktion einer Klasse einen (privaten) Parameter dieser Klasse als Argument übergibt? Auf den Parameter kann doch sowieso innerhalb der Funktion zugegriffen werden?
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#15

AW: Automatische Problem-Erkennung

  Alt 2. Nov 2023, 17:06
Ganz einfach, weil die Funktion teils von woanders mit anderen Parametern aufgerufen wird nur in diesem einen Aufruf wird genau der aktuelle Wert gebraucht.
Ich habe das Gefühl ihr denkt zu kompliziert. 😅
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Automatische Problem-Erkennung

  Alt 2. Nov 2023, 17:23
Die Kapselung ohne äußere Werte in Funktionen ist auch in Klassen sehr sinnvoll, weil der Ablauf viel besser nachvollziehbar ist. Ich lagere solche Funktionen aber auch gerne aus der Klasse aus in eigene Toolklassen, aber das macht natürlich auch nicht immer Sinn.

Die Problematik hatte ich auch schon einmal im Debugger suchen müssen bei fremdem Code.
Sebastian Jänicke
AppCentral
  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 00:06 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