Wenn eine Prozedur mit ReAllocateMemory einen Speicherbereich verändert, dann kann es ja sein, dass sich die Basisadresse verändert - deswegen ist es dann wohl notwendig die neue Basisadresse zurückzuliefern.
Das folgenden Beispiel scheint zu funktionieren - aber in der Prozedur wurde ja nicht festgelegt, welcher Variablentyp mit ProcedureReturn zurückgegeben werden soll. Ist das bei Pointern nicht notwendig oder funktioniert das eher durch Zufall? Und so etwas wie "Procedure.* xxxxxxx" gefällt dem Compiler sowieso nicht - also wie würde man es richtig machen?
Der Standard-Typ in PB ist Integer. Ein Pointer passt immer in ein Integer, deshalb ist alles korrekt so!
(Es sei denn, Du hast den Default-Typ per Define geändert!)
Gruß
Thomas
// leicht geändertes Beispiel, damit die Änderung auch sichtbar wird:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
PB-Hilfe hat geschrieben:Eine Prozedur kann wenn nötig eine Zahl oder einen String zurückliefern. Sie müssen in diesem Fall nach Procedure den Typ (.Typ) festlegen und das ProcedureReturn Schlüsselwort an einem beliebigen Punkt innerhalb der Prozedur aufrufen. Ein Aufruf von ProcedureReturn verlässt umgehend die Prozedur, auch wenn er innerhalb einer Schleife erfolgt.
ProcedureReturn kann nicht verwendet werden, um ein Array, eine Linked List oder eine Map Map zurückzuliefern, übergeben Sie zu diesem Zweck das Array, die Linked List bzw. die Map als Parameter an die Prozedur.
Der Returntyp muß nur bei String, Float oder Double angegeben werden, solange der Default-Typ nicht verändert wurde.
Ganzzahlen sollte man immer als Integer zurückgeben, auch wenn das Ergebnis in ein Byte, Word usw. passt!
Ausnahme Quad by 32-Bit Programmen.
Die Rückgabe eines Integer benötigt die wenigsten Anweisungen und ist am schnellsten ausgeführt. Das nutzen
z.B. eines Bytes als Rückgabewert (Procedure.b) spart keinerlei Speicher und verlangsamt (wenn auch kaum
bemerkbar) das Programm unnötig. In 99,9 % aller Fälle ist für die Rückgabe einer Ganzzahl (ausser siehe Quad) der
Integer die richtige Wahl!
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.