Zeiger dereferenzieren geht nicht

Hallo,

wenn ich einen Zeiger auf ein Array an eine andere Funktion übergebe, kommt dort nichts an.
Weiss jemand rat?
Hier mein Versuch:

unit UPointer;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type IntArray = Array of Integer;
pIntArray = ^IntArray;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function getArray:stuck_out_tongue:IntArray;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
pIArray : pIntArray;
IArray : IntArray;
i : Integer;
begin
pIArray := getArray;
IArray := pIArray^;
for i:=0 to High(IArray)-1 do
Caption:=Caption+’ '+inttostr(IArray[i]);
end;

function TForm1.getArray:stuck_out_tongue:IntArray;
var
localArray : IntArray;
begin
setlength(localArray,10);
localArray[4]:=9;
result:=@localArray;
end;

end.

Danke, Chris

das
sieht verdammt gefährlich aus. Habs nicht getestet, aber ich denke, der Fehler liegt hier:
Dein localArray ist ein LOKALES Array, welches nach Beenden der Methode getArray wieder gekillt wird.

Am besten, Du läßt diese Sache mit dem Zeiger ganz sein; übergebe doch einfach das Array als solches. Ist sicherer und außerdem wird intern auch nur mit Zeiger gearbeitet.

Gruß, Steffen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Stimmt. Mit einem globalen Array gehts tatsächlich.
Ist aber ziemlich hässlich. Ich will mehrere dieser Arrays an einen Treeview anhängen - deshalb die Zeiger.
Wahrscheinlich muss ich eine komplett andere Lösung suchen.
Trotzdem vielen Dank.

Chris

sieht verdammt gefährlich aus. Habs nicht getestet, aber ich
denke, der Fehler liegt hier:
Dein localArray ist ein LOKALES Array, welches nach Beenden
der Methode getArray wieder gekillt wird.

Am besten, Du läßt diese Sache mit dem Zeiger ganz sein;
übergebe doch einfach das Array als solches. Ist sicherer und
außerdem wird intern auch nur mit Zeiger gearbeitet.

Gruß, Steffen

Hi Chris,

so war das nicht gemeint; ich meine, wieso probierst Du’s nicht mal ‚ganz klassisch‘:

**function** TForm1.getArray:tIntArray;
**var** localArray : IntArray;
**begin**  
setlength(localArray,10);
localArray[4]:=9;
result:=localArray;
**end** ;

ungetestet, klappt aber vielleicht trotzdem :wink:
…und die Arrays behandelst Du dann genauso wie Deine Zeiger.
Andere Möglichkeit: Du kapselst Dein Array in einem Objekt, dann kannst Du auch wieder mit Zeigern hantieren :smile:)

Gruß, Steffen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]