Seite 3 von 3

Verfasst: 23.07.2008 12:22
von Little John
Brügge hat geschrieben:habe gerade zumgetestet...

also gehen tut es ^^ aber nicht 100%ig

Code: Alles auswählen


procedure getarray()
  dim array.s(5)

  for i = 0 to 5
    array(i) = "test"+str(i)
    
  next i

  procedurereturn @array()

enprocedure


dim array2.s(5)

array2() = getarray()

for i = 0 to 5
  debug array2(i)
next i

bei mir kommt an arraystelle 1 immer ein falscher wert... der rest geht!
Vielleicht solltest Du einfach mal das lesen, was in meinem vorigen Beitrag (direkt über Deinem) steht!!??
Manchmalfassichtsechtnich

Verfasst: 23.07.2008 12:29
von helpy
Brügge hat geschrieben:habe gerade zumgetestet...

also gehen tut es ^^ aber nicht 100%ig

Code: Alles auswählen


procedure getarray()
  dim array.s(5)

  for i = 0 to 5
    array(i) = "test"+str(i)
    
  next i

  procedurereturn @array()

enprocedure


dim array2.s(5)

array2() = getarray()

for i = 0 to 5
  debug array2(i)
next i

bei mir kommt an arraystelle 1 immer ein falscher wert... der rest geht!
ACHTUNG!

In der Prozedur wird ein Array angelegt, das aber nur lokal innerhalb der Prozedur GÜLTIGT ist! Am Ende der Prozedur wird der Speicher des Arrays wieder freigegeben. D.h. die Adresse, die zurückgegeben wird, zeigt auf ein nicht mehr gültiges Array. Der Speicherbereich KANN evt. noch die richtigen Werte beinhalten ... muss aber nicht!

Verfasst: 23.07.2008 12:39
von Brügge
hmm danke für die tips...

das ist jetzt doof...
ich habe vor, einen buffer einlesen, und einen array auszulesen...
wie ist das möglich? indem ich einen buffer und einen array einlese?

über den globalen weg finde ich es unsauber...

wie kann ich denn einen array an eine procedure übergeben?

Verfasst: 23.07.2008 12:49
von helpy
Ausschnitt aus der PB-Hilfe:
(...)

Die neuen Arrays sind immer lokal. Dies bedeutet, dass die Global oder Shared Befehle benutzt werden müssen, wenn ein im Haupt-Quellcode deklariertes Array in Prozeduren verwendet werden soll. Es ist auch möglich, ein Array als Parameter an eine Prozedur zu übergeben - es wird dabei "by reference" (was bedeutet, dass das Array nicht kopiert wird, sondern stattdessen die Funktionen in der Prozedur das originale Array manipulieren) übergeben.

(...)
Und noch ein Zitat aus der Hilfe:

Code: Alles auswählen

; Beispiel: Array als Prozedur-Parameter

  Procedure fill(A.l(1), length)  ; die 1 gibt hier die Anzahl der Dimensionen im Array an.
    For i = 0 To length
      A(i) = i
    Next i
  EndProcedure
  
  Dim A.l(10)
  fill(A(), 10)  ; das Array A() wird hier als Parameter übergeben
  
  Debug A(5)
  Debug A(10)
Pers. Anm.: Ich finde den Variablennamen "length" nicht geeignet, denn die Länge ist bei "Dim A.l(10)" ja eigentlich 11!

Verfasst: 23.07.2008 12:54
von Brügge
vielen dank helpy!!!

Verfasst: 23.07.2008 13:00
von Kaeru Gaman
@Brügge

wenn du deine PNs nicht liest, muss ich das eben öffentlich machen:
Bitte editiere deinen Wohnort im Profil!
Wohnort: Deutschland>NRW>Kreis
Steinfurt>Rheine>Altenrheine>Wachelweg
4>Obergeschoss>2.T
zerreist das Layout des Forums.

wenn du vor oder nach jedem ">" eine Leerstelle einfügst,
dann kann das vernünftig umgebrochen werden.

Danke.

Verfasst: 23.07.2008 13:15
von Brügge
@ Kaeru Gaman

sorry! nicht gesen... aber habe es sofort geändert ^^

mfg brügge