Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Ungültige Zeigeroperation" (https://www.delphipraxis.net/86012-ungueltige-zeigeroperation.html)

BillieJoe90 7. Feb 2007 22:03


"Ungültige Zeigeroperation"
 
Hallo,
ich bekomme die Fehlermeldung "Ungültige Zeigeroperation" beim Aufruf der folgenden Funktion:

Delphi-Quellcode:
function TSort.sortStrings(strings:TStrArray;order:String):TStrArray;
var i, i2, i3: Integer;
var sortedArray:TStrArray;
var tempArray:TTwoDimIntArray;
var c, merke:String;
begin

  for i:=0 to length(strings)-1 do begin

    setLength(tempArray, length(tempArray)+1);

    i3 := 1;
    setLength(tempArray[i], 1);

    for i2:=1 to length(strings[i]) do begin
      c := strings[i][i2];
      if ((length(IntToStr(tempArray[i][i3]))) + (length(IntToStr(self.charToAlphabetInteger(c)))) > 9) then begin
        i3 := i3 + 1;
        setLength(tempArray[i], length(tempArray[i])+1);
      end;
      tempArray[i][i3] := self.charToAlphabetInteger(c);
    end;

  end;


  setLength(sortedArray, length(strings));

  for i:=0 to length(strings)-1 do begin
    for i2:=0 to i+1 do begin
      if ((tempArray[i+1][1] < tempArray[i2][1]) AND (order = 'ASC')) OR
         ((tempArray[i+1][1] > tempArray[i2][1]) AND (order = 'DESC')) then begin
        merke := strings[i2];
        strings[i2] := strings[i+1];
        strings[i+1] := merke;
      end;
    end;
  end;

  for i:=0 to length(strings)-1 do begin
    sortedArray[i] := strings[i];
  end;

  Result := sortedArray;
end;
Der Fehler kann nicht in der Funktion "self.charToAlphabetInteger()" liegen, das habe ich geprüft!

Kann mir jemand helfen? Ich habe nämlich meines Erachtens nach alle Array-Längen richtig gesetzt usw.

Danke schonmal!

Johannes

3_of_8 7. Feb 2007 22:03

Re: "Ungültige Zeigeroperation"
 
Setz mal Breakpoints und grenze das genauer ein. Der Evaluator kann da auch helfen.

Hawkeye219 7. Feb 2007 22:27

Re: "Ungültige Zeigeroperation"
 
Hallo Johannes,

ein Versuch: tempArray besitzt die Länge von strings, in den Zeilen 32 und 33 greifst du wahrscheinlich auf Elemente außerhalb beider Arrays zu. Ich habe den Quelltext nicht vollständig geprüft, aber vielleicht genügt es, in der Schleife ab Zeile 30 auf den letzten Durchlauf zu verzichten.

Gruß Hawkeye

3_of_8 7. Feb 2007 22:28

Re: "Ungültige Zeigeroperation"
 
Übrigens lässt sich sowas viel leichter mit aktivierten Rangechecks ({$R+}) finden.

marabu 8. Feb 2007 06:29

Re: "Ungültige Zeigeroperation"
 
Guten Morgen Johannes,

weil du nicht beschreibst, wozu dein Code benötigt wird, fehlt mir zum Verständnis die Methode CharToAlphabetInteger(). Kannst du auch davon den Quelltext veröffentlichen?

Grüße vom marabu

BillieJoe90 8. Feb 2007 12:40

Re: "Ungültige Zeigeroperation"
 
Zitat:

Zitat von marabu
Guten Morgen Johannes,

weil du nicht beschreibst, wozu dein Code benötigt wird, fehlt mir zum Verständnis die Methode CharToAlphabetInteger(). Kannst du auch davon den Quelltext veröffentlichen?

Grüße vom marabu

Danke, aber ich habe das Problem jetzt gelöst, doch kann ich leider nicht sagen, wie?! :lol: :oops:

Oxmyx 8. Feb 2007 12:46

Re: "Ungültige Zeigeroperation"
 
Zitat:

Zitat von BillieJoe90
Danke, aber ich habe das Problem jetzt gelöst, doch kann ich leider nicht sagen, wie?! :lol: :oops:

Das ist schlecht. Denn dann weißt du auch nicht, ob der Fehler tatsächlich weg ist, oder auf anderen PCs auf einmal wieder auftritt.


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