Autor Beitrag
kat1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 40

Win XP
D6 EntPr
BeitragVerfasst: Di 08.07.03 09:54 
Hallo,

mal ne Frage. Ich dachte eigentlich immer, und so steht es auch in allen Büchern und Tut's, die ich bisher gelesen habe, dass wenn ich eine Funktion folgendermaßen definiere:

Is nur ein Beispiel, meine wirkliche Funktion sieht anders aus, aber das verdeutlicht das Problem:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function TueEtwas (A:real; b:integer):real;
begin
  A:=A+2;
  b:=b-2;
  Result:=A+b;
end;


Nun werden die Parameter A und b ja als Werteparameter übergeben, d.h. es wird eine Kopie erstellt und der Originalparameter in der aufrufenden Prozedur nicht verändert. Jetzt habe ich aber nur mal zum Spaß meine aufrufende Prozedur etwas verändert (auch nur als Test).

ausblenden Delphi-Quelltext
1:
2:
3:
4:
TestUnknownsVector:=LU_Decomposition(TestMatrix,3,TestResultVector);
  Edit1.Text:=DisplayComplex(TestResultVector[0]);
  Edit2.Text:=DisplayComplex(TestResultVector[1]);
  Edit4.Text:=DisplayComplex(TestResultVector[2]);


und bekomme doch tatsächlich die Werte des in der Funktion LU_Decomposition veränderten array's angezeigt.

Weiß jemand, woran das liegt?

_________________
Mfg Uwe
Es ist eine Unsitte der Menschen, sich an alles zu gewöhnen.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 08.07.03 10:11 
Das kommt ganz darauf an wie die Funktion LU_Decomposition deklariert ist bzw. auch was TestResultVector für ein array ist (statisch oder dynamisch). Dyn. Arrays sind nämlich nur Pointer auf die Array-Daten, übernimmt die Funktion LU_Decomposition also einen dyn. Array, so bekommt sie nur einen Pointer auf die Daten und nicht eine Kopie der Daten! Folglich wirken sich Änderungen auch auf die Daten der aufrufenden Prozedur aus, da ja beiden Prozeduren/Funktionen mit ein und denselben Daten arbeiten...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
kat1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 40

Win XP
D6 EntPr
BeitragVerfasst: Di 08.07.03 10:23 
Ah ja, genau das ist der Fehler, die Werte sind natürlich dyn. arrays. Werde also wohl oder übel mit copy eine Kopie anfertigen müssen. Danke für die schnelle Hilfe.

_________________
Mfg Uwe
Es ist eine Unsitte der Menschen, sich an alles zu gewöhnen.