[Falschverwendung] Fehler bei der Proceduren-Rückgabe

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

[Falschverwendung] Fehler bei der Proceduren-Rückgabe

Beitrag von Leonhard »

Code: Alles auswählen

Procedure Proc()
  ;ProcedureReturn @"-String-" ;<-- damit funktioniert das.
  Protected String$ = "-String-" ;<-- hiermit nur, wenn dich die länge des Strings angebe
  ProcedureReturn @String$
EndProcedure

Debug PeekS(Proc())
Warum funtioniert das nicht???

Es sollte doch ein Pointer auf den String zurückgegeben werden oder?
Zuletzt geändert von Leonhard am 25.07.2007 07:31, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

gute frage.

du hast die variable als Protected declariert, aber nicht als Static.
deshalb wird sie nach verlassen der procedure gelöscht.

außerdem solltest du den Typ der Procedurenrückgabe deklarieren.

Code: Alles auswählen

Procedure.l Proc() 
  Static String$ = "-String-"
  ProcedureReturn @String$ 
EndProcedure 

Debug PeekS(Proc())
PS:
danke für den Frühsport. bringt die grauen Zellen in trab. :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Kaeru Gaman hat geschrieben:außerdem solltest du den Typ der Procedurenrückgabe deklarieren.
Gibt man den Procedure-Type bei Pointern überhaupt an?
und außerdem wird dieser Type nicht automatisch auf LONG gesetzt (den Standart-Wert)?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Leonhard hat geschrieben:
Kaeru Gaman hat geschrieben:außerdem solltest du den Typ der Procedurenrückgabe deklarieren.
Gibt man den Procedure-Type bei Pointern überhaupt an?
und außerdem wird dieser Type nicht automatisch auf LONG gesetzt (den Standart-Wert)?
Mit DefType/Define kann man den Standard-Datentyp ändern, wenn man keine Parameter angibt. Anstatt Protected hätte ich Define verwendet.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Gesperrt