Verschiedene Zeiger auf dieselbe Adresse

Gast #1342442
Lesenswert?

Hallo Leute!

Ich programmiere unter C und habe folgendes Problem:
Ich lade ein binäres File in ein char Feld.
Es handelt sich aber um 32-Bit-Werte, was bedeuetet, dass
ich später mit einem 32-Bit-Pointer darauf zugreifen muss.

Vorher habe ich es folgendermaßen gelöst:
union uniontyp{
  unsigned long lbuffer[1000];
  unsigned char abuffer[4000];
}u;

In den u.abuffer habe ich das File reingeladen und greife
später mit u.lbuffer[zeiger]; darauf zu.

Das Problem ist jetzt, dass die Größe von 1000 und 4000
fix sind und ich beim Compilieren wissen muss, wie groß das
File maximal ist. Diese Lösung ist meiner Meinung nach
sehr unschön und unflexibel.


Danach hätte ich es mit malloc versucht:
union uniontyp{
  unsigned long *lbuffer
  unsigned char *abuffer
}u;

u.(*lbuffer)=(void*)malloc(samples);

Der Compiler meldet mir einen Fehler. Geht das überhaupt
in einem Union ein malloc zu verwenden?
- Bzw, wie könnte ich das Problem auf elegante Weise lösen.

Vielen Dank im Voraus.

Schöne Grüße

Martin
Persönliche Seite #1342461
Lesenswert?

Und warum um alles in der Welt soll man dafür eine union benötigen?
1
uint8_t *buffer;
2
uint32_t *pointer;
3

4
// angenommen, daß "samples" die Anzahl der 32-Bit-Werte ist
5

6
buffer = malloc(samples * sizeof (uint32_t));
7

8
// buffer füllen
9
//
10

11

12
pointer = (uint32_t *) buffer;
13

14
// und pointer nutzen
15

16
for (i = 0; i < samples; i++)
17
{
18
  pointer[i] = irgendwas;
19
}
Gast #1342465
Lesenswert?

Hallo Helumt!


Vielen Dank für deine Antwort.
Diese Möglichkeit hätte ich auch schon versucht, aber das Problem dabei 
ist, dass man jetzt ein Union-Feld hat mit je 4 Bytes pro Union-Element.

Ich möchte aber ein einziges Union-Element mit einem frei definierbaren 
Feld drinnen.

Ich habe auch schon überlegt, ob es nicht möglich ist einen Long-Zeiger 
und einen Character-Zeiger auf dieselbe Adresse zu biegen.
Geht das?
Dann fiele das mit dem Union weg und ich kann Speicher für die zwei 
verschiedenen Zeiger, die auf denselben Speicherbereich zeigen, 
reservieren wie ich möchte.

Danke im Voraus.

Schöne Grüße

Martin

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren