Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array of String - Zugriffsverletzung (https://www.delphipraxis.net/114848-array-string-zugriffsverletzung.html)

Real-TTX 1. Jun 2008 17:40


Array of String - Zugriffsverletzung
 
Hallo Gemeinde :)

Ich habe ein Problem mit einem Dynamischen Array. Ich denke ich habe irgendwo ein Denkfehler drinne. Ich finde ihn einfach nicht. Ich mach es eigentlich wie immer. Und es geht einfach nicht :/ Ich hoffe jemand findet was:

Delphi-Quellcode:
type
  ArrOfStr = array of string;

....


function ReadComPorts : ArrOfStr;
var
  reg: TRegistry;
  st: Tstrings;
  i: Integer;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('hardware\devicemap\serialcomm', False);
    st := TstringList.Create;
    try
      reg.GetValueNames(st);
      //setlength(result,0);
      for i := 0 to st.Count do // st.Count = 2 Laut Überwachung
      begin
        setlength(result,i);
        result[i] := reg.Readstring(st.strings[i]);

      end;
    finally
      st.Free;
    end;
    reg.CloseKey;
  finally
    reg.Free;
  end;

end;
Gruß, Real-TTX

Apollonius 1. Jun 2008 17:43

Re: Array of String - Zugriffsverletzung
 
Das letzte Array-Element hat den Index Length-1, sodass dein Index in der Schleife zu hoch ist. Selbiges für die Stringliste, die Schleife muss von 0 bis Count-1 laufen.
Das SetLength solltest du außerdem vor die Schleife verlagern, da dies sehr viel Zeit spart.

marabu 1. Jun 2008 17:46

Re: Array of String - Zugriffsverletzung
 
Hi,

ein paar augenfällige Korrekturen:

Delphi-Quellcode:
uses
  Types;

....

function ReadComPorts : TStringDynArray;
var
  reg: TRegistry;
  st: Tstrings;
  i: Integer;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('hardware\devicemap\serialcomm', False);
    st := TStringList.Create;
    try
      reg.GetValueNames(st);
      setlength(result, st.Count);
      for i := 0 to Pred(st.Count) do
        result[i] := reg.Readstring(st[i]);
    finally
      st.Free;
    end;
    reg.CloseKey;
  finally
    reg.Free;
  end;
end;
Grüße vom marabu

Real-TTX 1. Jun 2008 17:57

Re: Array of String - Zugriffsverletzung
 
Ich merk schon, ohne euch bin ich aufgeschmissen :)
Danke euch!

Gruß, Real-TTX


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