Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schutzverletzung bei offenen String-Arrays als Parameter (https://www.delphipraxis.net/93484-schutzverletzung-bei-offenen-string-arrays-als-parameter.html)

Gremlin 6. Jun 2007 17:01


Schutzverletzung bei offenen String-Arrays als Parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kann mir bitte jemand sagen, warum D5 bei diesem Code denkt das es wichtig wäre eine Exception zu werfen? :?:

Delphi-Quellcode:

function TForm1.Foooo(const TableName:string; Additonals:array of string):TStringList;
begin
  Result := TStringList.Create;
  [...]
end;

[...]
var
  Liste : TStringList;
begin
  Liste := Foooo('Tabelle', []);
  try
    Memo1.Lines.Assign(Liste);
  finally
    Liste.Free;
  end;
end;
Wird das offene Array als Konstante übergeben, tritt keine Exception auf. :gruebel:
Es ist nicht wirklich wichtig, ich kann ja eine Konstante verwenden, aber prinzipiell sollte es bei diesem Code-Fragment eigentlich keine wirklichen Probleme geben.

Delphi-Quellcode:

function TForm1.Foooo(const TableName:string; const Additonals:array of string):TStringList;

mkinzler 6. Jun 2007 19:03

Re: Schutzverletzung bei offenen String-Arrays als Parameter
 
Du mußt auch etwas übergeben

Zacherl 6. Jun 2007 19:35

Re: Schutzverletzung bei offenen String-Arrays als Parameter
 
Aus dem geposteten Code geht das leider nicht eindeutig hervor. Poste doch mal bitte die gesamte Funktion "Fooo". Normalerweise darf man nämlich durchaus leere Array übergeben.

mkinzler 6. Jun 2007 19:52

Re: Schutzverletzung bei offenen String-Arrays als Parameter
 
Zitat:

Normalerweise darf man nämlich durchaus leere Array übergeben.
Dann darf man aber nicht auf ihn Zugreifen, was er vermutlich macht.

Zacherl 6. Jun 2007 20:03

Re: Schutzverletzung bei offenen String-Arrays als Parameter
 
Jap, daher soll er ja mal den kompletten Code liefern .. grundsätzlich sollte man aber prüfen, ob low(Array) >= 0 ist, bevor man mit einer Array-Schleife beginnt.

Gremlin 6. Jun 2007 20:13

Re: Schutzverletzung bei offenen String-Arrays als Parameter
 
Natürlich muss man auf das Array zugreifen können, dabei dürfte es aber keine Rolle spielen, ob das const - Argument angegeben ist oder nicht (ReadOnly-Zugriff).

Der Code weiter unten ist gekürzt und führt reproduzierbar zu einer Exception in D5 Pro UP2. Ich habs gerade mit D2007 getestet und dort kommt der Fehler nicht mehr. Nunja, wenn es denn so sein soll, nehmen wir eben zusätzlich das const - Argument. Delphi muss es ja wissen :-D
Trotzdem danke für die Unterstützung.


Delphi-Quellcode:
function TForm1.Foooo(const TableName:string; Additonals:array of string):TStringList;
var
  i : integer;
begin
  Result := TStringList.Create;
  Result.Add('Foo1');
  Result.Add('Foo2');
  for i := Low(Additonals) to High(Additonals) do
    Result.Add(Additonals[i]);
end;

mkinzler 6. Jun 2007 20:14

Re: Schutzverletzung bei offenen String-Arrays als Parameter
 
Überprüfe doch einfach vor der Schleife, ob der Array leer ist


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 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