Pointer an Funktion übergeben und in der Funktion anlegen und füllen

Elandril

Mitglied
Hallo,

angesichts dessen, womit ich mich gerade rumschlage, ist das ein fast schon banales Problem.

Und zwar bin ich gerade dabei, in einer Funktion den Inhalt einer Wave-File für DirectSound auszulesen.

Dazu hab ich eine Funktion

Code:
loadWaveFile(LPSTR filepath, WAVESTRUCT &waveInfo, unsigned char *targetBuffer, unsigned long &bufferSize);

Hinweis: WAVESTRUCT ist einfach nur der Wave-Header (samples/sekunde etc.)


In der loadWaveFile hol ich mir dann via new entsprechend Speicher auf den targetBuffer

Code:
bufferSize = waveInfo.lengthDataBlock;
targetBuffer = new unsigned char[bufferSize];

... Fehlerhandling...

int count = fread(targetBuffer, 1, waveInfo.lengthDataBlock, wavefile); //wavefile ist ein FILE-Objekt zur Wave-Datei im System

Die Methode ruf ich dann in einer anderen Methode zum Erzeugen der SoundBuffer auf und übergebe ihr entsprechend einen unsigned char *waveBuffer; sowie einen unsigned long bufferSize;

Jedenfalls wird der Puffer in der loadWaveFile richtig angelegt und befüllt, aber beim zurückkehren in die SoundBuffer-Funktion steht der waveBuffer wieder auf NULL. Irgendwas überseh ich mit der Referenz in der Methodenübergabe, vermute ich, allerdings komm ich grad nicht drauf, was ich überseh.

Vielleicht hat ja jemand einen kleinen Tipp für mich.

Danke schon mal!
 
Hi.

Du müßtest die Übergabe z.B. so machen:
C++:
loadWaveFile(LPSTR filepath, WAVESTRUCT &waveInfo, unsigned char *&targetBuffer, unsigned long &bufferSize);
Gruß
 
Hi

wenns keine Referenz ist, wird von einer Parametervariable grundsätzlich eine Kopie übergeben.
Im Fall Pointer bedeutet das (wenn er schon angelegt wäre): Von der Adress-Zahl wird eine Kopie gemacht, die aber eben noch immer den gleich Wert hat und dadurch auf den selben Speicher zeigt wie die "Originaladresse".

Wenn du den Speicher aber erst in der FUnktion anlegst, geht die Adresse,
die new erzeugt, nur in die Kopie...

Eine Lösung wäre (da Referenzen ja sowieso im Einsatz sind):
unsigned char* &targetBuffer
 
*an den Kopf schlag* Ich sollt echt Urlaub machen... &* hatte ich heut schon mal probiert... auf die Idee mit *& bin ich nicht gekommen...

Dankeschön!
 
Zurück