Seite 1 von 1

Array von Pointern

Verfasst: 06.10.2017 17:07
von ProgOldie
Im Zusammenhang mit meine BLOB Problem bin ich bei dessen Lösung über eine andere Frage gestolpert:
Wie übergibt man eigentlich ein Array von Pointern an eine Prozedur ?

Code: Alles auswählen

EnableExplicit

Dim *BlobMem(5)
Dim BlobSize.i(5)
Define BloBNr.i

Procedure prepareBlobs(Array *BlobMem(1),Array BlobSize.i(1))
  Protected BlobNr.i
  For BlobNr=0  To 4
    BlobSize(BlobNr)=10*BlobNr+5  ; fiktive Werte
    *BlobMem(BlobNr)=AllocateMemory(BlobSize(BlobNr))
    Debug "in prepare "+"Nr="+Str(BlobNr)+ "Mem="+Str(*BlobMem(BlobNr))+"size="+Str(BlobSize(BlobNr))
  Next 
EndProcedure

prepareBlobs(@*BlobMem(),@BlobSize())

For BlobNr=0 To 4
  Debug "nach prepare "+"Nr="+Str(BlobNr)+ "Mem="+Str(*BlobMem(BlobNr))+"size="+Str(BlobSize(BlobNr))
  FreeMemory(*BlobMem(BlobNr))
Next 

Die Definition von prepareBlobs wird als syntaktisch richtig erkannt. Nur beim Aufruf von prepareBlobs gibt es stets Probleme, egal ob ich
prepareBlobs(@*BlobMem(),@BlobSize()) oder prepareBlobs(*BlobMem(),@BlobSize()) benutze.

Wo liegt mein Fehler?

Re: Array von Pointern

Verfasst: 06.10.2017 17:16
von NicTheQuick
Ich würde statt mehrerer gleich groß dimensionierter Arrays eine Struktur und ein Array nehmen:

Code: Alles auswählen

EnableExplicit

Structure Blob
	*mem
	size.i
EndStructure

Dim blobs.Blob(5)


Procedure prepareBlobs(Array blobs.Blob(1))
	Protected BlobNr.i
	For BlobNr = 0 To 4
		With blobs(BlobNr)
			\size = 10 * BlobNr + 5  ; fiktive Werte
			\mem = AllocateMemory(\size)
			Debug "in prepare " + "Nr=" + BlobNr + "Mem=" + \mem + "size=" + \size
		EndWith
	Next
EndProcedure

prepareBlobs(blobs())

Define BloBNr.i

For BlobNr = 0 To 4
	Debug "nach prepare " + "Nr=" + BlobNr + "Mem=" + blobs(BlobNr)\mem + "size=" + blobs(BlobNr)\size
	FreeMemory(blobs(BlobNr)\mem)
Next

Re: Array von Pointern

Verfasst: 06.10.2017 17:26
von ProgOldie
Danke Nic,
klappt prima.