Array von Pointern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Array von Pointern

Beitrag 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?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8677
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Array von Pointern

Beitrag 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
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Array von Pointern

Beitrag von ProgOldie »

Danke Nic,
klappt prima.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten