Zeigerproblem
-
Ich habe ein Problem mit Zeigern, ich hoffe ihr könnt mir weiterhelfen:
Also ich habe 2 Buffer, jeder Buffer besteht aus mehreren Blöcken, in welche Daten geschrieben werden sollen.
1. Problem: Ich brauche einen Zeiger auf die Buffer - die nenne ich BufferId und wenn der eine Buffer voll ist, dann soll er auf den nächsten Buffer zeigen. Ich würde es so machen, dass ich überprüfe ob der Buffer voll ist und dann BufferId++ mache. Aber bin mir nicht sicher?
2. Problem: Ich habe einen Schreibzeiger (WriteIdx), der soll die einzelnen Daten in die Blöcke schreiben. Ist ein Buffer voll, dann wird er wieder auf 0 gesetzt, um dann im nächsten Buffer die Daten weiterzuschreiben.
3. Problem: Ich brauche noch einen Zeiger, der auf den jeweiligen Buffer zeigt, der gerade voll ist und dann an eine andere Stelle weitergegeben wird.
4. Problem: Ich muss die Daten in die Bufferstruktur kopieren, dass würde ich mit memcpy machen, allerdings müsste ich ihm dann sagen, dass er in den aktuellen Buffer und an die aktuelle Schreibeposition schreibt:
memcpy(BufferTable[], Daten, Länge);
in die [] müsste dann die Id und die Position, aber wie soll ich das machen?
Kann mir jemand helfen?
-
Das mit dem BufferID++ ist fatal, es sei denn, dein Buffer sind jeweils nur ein Byte groß und liegen hintereinander (wie z.B. ein C-String).
Sollen die Buffer jeweils zyklisch verstauscht werden?
Oder sollen mehrere der Reihe nach drankommen aber jeweils nur einmal?Im letzten Fall kannst du es so probieren:
char *Buffer1, *Buffer2; //Die eigentlichen char *ReadBuffer; //Der Zeiger, der auf eine Puffer zeigt ReadBuffer = Buffer1; ... //nu wird der erste gefüllt .. // jetzt kommt der zweite dran ReadBuffer = Buffer2;
-
Ich habe aber nur eine Bufferstruktur allokiert, dass ganze wird über eine Tabelle gesteuert, welche dann auf die einzelnen Abteile zeigen soll. Die Buffer haben jeweils die Größe von Blöcken * der Höhe eines Blocks (die ich ermittle). Die Buffer sollen der Reihe nach gefüllt werden, ist der erste Buffer voll kommt der nächste dran - ist der zweite Buffer voll, muss geschaut werden ob der erste wieder leer ist, ist das der Fall wird da wieder hinein geschrieben. (Ringbuffer)