Autor Beitrag
mariok
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 30.04.04 13:33 
Hallo, ich habe zu folgendem Vorgang einmal eine Frage:

Ich habe zunächst folgende globale Deklarationen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Unit...

.
.
.

POptions = ^.AOptions;

AOptions = record
    Pos: string;
    Beschr: String;
    opt_nummer: array of single;
    opt_anzahl: array of integer;
    opt_menge: array of single;
    opt_text: tstringlist;
    opt_einheit: tstringlist;
  end;

var artikelliste array of POptions;



nun folgt innerhalb einer Prozedur folgende lokale Deklaration:

ausblenden Delphi-Quelltext
1:
var ARec: POptions;					


und es findet folgender Vorgang innerhalb einer Schleife dieser Prozedur statt:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
ARec := artikelliste[i]    //artikelliste enthält zu diesem Zeitpunkt Elemente,
                              //sonst würde es zu dieser Anweisung nicht kommen
                //Arec ist zu diesem Zeitpunkt als Pointer auf AOptions
                //deklariert, es wurde kein Speicher mit New reserviert



Ich habe dazu nun folgende Fragen:

1. erhält ARec nur die Adresse des Records auf das artikelliste[i] zeigt, oder wird in
ARec eine Kopie des Records angelegt?

2. für den Fall, das ARec (zum Teil) eine Kopie des Records erhält:
was passiert mit den dynamischen Arrays innerhalb des Records? Werden an ARec Kopien
der Arrays von artikelliste[i] übergeben (und für diese Kopien Speicher reserviert) oder enthalten
die dyn. Arrays von ARec nur die Adressen der dyn. Arrays von artikelliste[i]?
Werden an die Strings und TStringLists von ARec Kopien der jeweiligen Elemente
von artikelliste[i] übergeben oder auch nur die Adressen der "Originale"?

3. Die Zuweisung an ARec findet innerhalb der Schleife mehrmals statt. Was passiert, wenn die dyn.
Arrays von artikelliste[i] einmal weniger Elemente haben als die jeweiligen von ARec zu diesem
Zeitpunkt? (Für den Fall, das die Arrays von ARec nicht nur Adressen erhalten).
Werden die Arrays von ARec in diesem Fall verkürzt, so dass die Funktion length() nach der
Zuweisung die korrekte Anzahl Elemente liefert?

So.. das ist bestimmt ganz schön viel, würde mich aber trotzdem freuen, wenn sich jemand hier etwas auskennt
Liebe Grüße

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 30.04.04 15:00 
mariok hat folgendes geschrieben:
1. erhält ARec nur die Adresse des Records auf das artikelliste[i] zeigt, oder wird in
ARec eine Kopie des Records angelegt?
Wenn artikelliste[i] ein Pointer ist (var articelliste: array of POptions) ist es eine Kopie des Pointers, das heißt der Wert, der vorher in artikelliste[i] stand (4-byte-Pointer auf Speicheradresse) wird ausgelesen und in Arec gespeichert. Ist artikellise[i] ein AOptions (und kein POptions) dürfte die Compiler Magic für den gleichen Effekt sorgen.

mariok hat folgendes geschrieben:
3. Die Zuweisung an ARec findet innerhalb der Schleife mehrmals statt. Was passiert, wenn die dyn.
Arrays von artikelliste[i] einmal weniger Elemente haben als die jeweiligen von ARec zu diesem
Zeitpunkt? (Für den Fall, das die Arrays von ARec nicht nur Adressen erhalten).
Werden die Arrays von ARec in diesem Fall verkürzt, so dass die Funktion length() nach der
Zuweisung die korrekte Anzahl Elemente liefert?
Ja, aber nur mit der Einschränkung, daß es nur zwei physikalische Records gibt, wenn ARec vom Typ AOptions ist.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
mariok Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 04.05.04 12:47 
Vielen Dank, tommie