Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler: Ungültige Zeigeroption (https://www.delphipraxis.net/111254-fehler-ungueltige-zeigeroption.html)

5etH 1. Apr 2008 10:37


Fehler: Ungültige Zeigeroption
 
Hallo Zusammen,

ich habe ein Programm geschrieben und bekommen diese Fehlermeldung: Em Projekt ... ist eine Exception der Klasse EInvalidPointer mit der Meldung 'Ungültige Zeigeroption' aufgetreten.
Woher kommt dieser Fehler und wie kann ich ihn beheben? Das ganze kommt, wenn ich auf einen Button drücke... Hier einmal der dazugehörige Quelltext.

Delphi-Quellcode:

var schluessel1, schluessel2, schluessel3 : String;
    i : Integer;
    KeyA, KeyB, KeyC : array of Integer;
    zwisch1, zwisch2, zwisch3 : array[0..7] of integer;
    const bin0: array[0..3] of Integer = (2,4,6,8);
    const bin1: array[0..3] of Integer = (3,5,7,9);
begin
    keyx := '';
    keyy := '';
    keyz := '';
    schluessel1 := IntToStr(key11);
    SetLength(KeyA, Length(schluessel1));
    Randomize;
    for I := 1 to length(schluessel1) do
      begin
        zwisch1[i] := StrToInt(schluessel1[i]);
         case StrToInt(Schluessel1[i]) of
           0: keyA[i] := (bin0[random(3)]);
           1: keyA[i] := (bin1[random(3)]);
         end;
      end;
      for I := 1 to length(schluessel1) do
        begin
          keyX := keyX + IntToStr(keyA[i]);
        end;
      edit8.text := keyX;

    Schluessel2 := IntToStr(key12);
    SetLength(keyB, Length(Schluessel2));
    Randomize;
    for I := 1 to length(Schluessel2) do
      begin
        zwisch2[i] := StrToInt(Schluessel2[i]);
         case StrToInt(Schluessel2[i]) of
           0: keyB[i] := (bin0[random(3)]);
           1: keyB[i] := (bin1[random(3)]);
         end;
      end;
      for I := 1 to length(Schluessel2) do
        begin
          keyY := keyY + IntToStr(keyB[i]);
        end;
      edit9.text := keyY;

    schluessel3 := IntToStr(key13);
    SetLength(KeyC, Length(schluessel3));
    Randomize;
    for I := 1 to length(schluessel3) do
      begin
        zwisch3[i] := StrToInt(schluessel3[i]);
         case StrToInt(schluessel3[i]) of
           0: KeyC[i] := (bin0[random(3)]);
           1: KeyC[i] := (bin1[random(3)]);
         end;
      end;
      for I := 1 to length(schluessel3) do
        begin
          keyZ := keyZ + IntToStr(KeyC[i]);
        end;
      edit10.text := keyZ;

schonmal vielen dank für eure Hilfe

Euer Manu

taaktaak 1. Apr 2008 10:41

Re: Fehler: Ungültige Zeigeroption
 
mit SetLength() wird nur von 0..n-1 deklariert, dein Zugriff erfolgt aber bis zum Index n

gmc616 1. Apr 2008 10:43

Re: Fehler: Ungültige Zeigeroption
 
ich vermute hier
Delphi-Quellcode:
schluessel1 := IntToStr(key11);
SetLength(KeyA, Length(schluessel1));
Randomize;
for I := 1 to length(schluessel1) do // <-- hier
begin
Array sind Null-basierend.

so sollte es richtig sein:
Delphi-Quellcode:
for I := 0 to length(schluessel1) -1 do

mkinzler 1. Apr 2008 10:43

Re: Fehler: Ungültige Zeigeroption
 
Schau mal im Debugger, wo der Fehler genau auftritt.

Zitat:

Zitat von gmc616
Array sind Null-basierend.

Strings aber nicht

taaktaak 1. Apr 2008 10:47

Re: Fehler: Ungültige Zeigeroption
 
??? Der Fehler wird auch im Array KEYxx vermutet - nicht im String. Der Zugriff auf den String muss natürlich angepasst werden (oder vice versa)

DeddyH 1. Apr 2008 10:49

Re: Fehler: Ungültige Zeigeroption
 
Eben da ist der Haken. Es muss so in der Art lauten:
Delphi-Quellcode:
for i := 1 to Length(StringVar) do
  array[i - 1] := StrToInt(StringVar[i]);

Muetze1 1. Apr 2008 13:45

Re: Fehler: Ungültige Zeigeroption
 
Auch hier kann ich grundsätzlich nur dazu raten während der Entwicklung unbedingt die Bereichs- und Überlaufprüfung in den Projektoptionen -> Compiler zu aktivieren und danach das gesamte Projekt neu erstellen zu lassen (nicht nur compilieren). Danach einfach weiter arbeiten/testen, dann wären alle bisher hier aufgezählten Fehler schon aufgezeigt worden von Delphi


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