Strukturie Prozedurrückgabe bei PureBasic

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Little John

Beitrag 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
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag 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!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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?
Abgeschlossene games: No Name Game (NNG) Download-Link:
http://web56.login-1.loginserver.ch/eas ... 2125104111
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag 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!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

vielen dank helpy!!!
Abgeschlossene games: No Name Game (NNG) Download-Link:
http://web56.login-1.loginserver.ch/eas ... 2125104111
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

@ Kaeru Gaman

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

mfg brügge
Abgeschlossene games: No Name Game (NNG) Download-Link:
http://web56.login-1.loginserver.ch/eas ... 2125104111
Antworten