Pointer Warning..

Gast #821445
Lesenswert?

sollte das nicht + *(my_type *) data heißen?
-> also ein Cast zu einem Pointer auf den Typ Deiner Wahl.
Woher soll der Compiler denn sonst wissen, auf was data zeigt,
schließlich ist das ja generisch (könnte z.B. auch ein struct sein)?
Und void - Zeiger darf man nicht einfach dereferenzieren!

Gruß
  Bimmy and Jimmy
#821465
Lesenswert?

Der void * ist ein ganz spezieller Pointer: Er zeigt nicht auf einen 
Datentyp, sondern auf 'Nichts', Stefan "stefb" B. schon schrieb.

Bei gewöhnlichen Pointern wird Pointerarithmetik angewandt, wenn man 
damit rechnet. So macht der Compiler z.B. aus diesem Ausdruck

   int i[5] = { 0 };
   int *pI = i + 3;

folgende Berechnung:

   int *pI = (int *) ((char *) i + 3 * sizeof (int));

(Der Name eines Array-Objekts ohne Indizierung - i - ergibt einen 
Pointer auf das 0. Element!)

Da ein void * auf ein unbekanntes Objekt ohne Länge zeigt, ergibt 
Pointerarithmetik damit keinen Sinn, sondern ist ein Indiz für einen 
Fehler -- der wird vom Compiler angezeigt.
Gast #821466
Lesenswert?

Ich möchte die zwei Byte im Kopf der Puffer schreiben, das ist aber 
schwachsinnig wie ich das gemacht habe, ich kann doch einen Pointer 
keine Daten zuweisen aber eine Adresse.Habt ihr eine Idee wie ich das am 
besten machen kann?
Gast #821483
Lesenswert?

In diesem Fall kannst Du deinen generischen Pointer in einen
unsigned long Wert umwandeln. Dieser Typ ist per Definition
hinreichend groß, um einen beliebigen Pointer aufzunehmen.
Danach kannst Du diesen Wert ändern und zuweisen.
Kleines Beispiel:
1
#include <stdio.h>
2

3
int bla (void *f)
4
{
5
void *p;
6
unsigned long q;
7

8
        q = (unsigned long) f;
9
        q += 3;
10
        p = (void *)q;
11

12
        printf ("%p => %p\n", f, p);
13
}
14

15
int main (void)
16
{
17
int a = 23;
18
        bla (&a);
19
        return 0;
20
}

Solche Probleme solltest Du im Allgemeinen aber eleganter lösen.
Gruß
Bimmy and Jimmy
Gast #821489
Lesenswert?

Ich danke euch Leute, manchmal braucht man eine Backpfeife um zu 
denken;-),
für die Leute, die sich dafür interessieren wie ich das gelöst habe:
1
void SetData(void* data, unsigned int DataSize)
2
{
3
 struct pbuf p;
4
 unsigned char* SrcBuffer; 
5
 unsigned char* DestBuffer;
6

7
 DestBuffer = (unsigned char*) p->payload;
8
 SrcBuffer  = (unsigned char*)data; 
9
 
10
 *(UDPBuffer++) = 0x01;
11
 *(UDPBuffer++) = 0x02;
12

13
 for (i = 0; i < DataSize;i++ ) 
14
  *(UDPBuffer++) = *(DataBuffer++);
15
}
Gast #821729
Lesenswert?

Wenn *data sowieso in einen (unsigned char*) gecastet wird, warum 
definierst du die Funktion dann nicht auch gleich so? Also:
1
void SetData(unsigned char *data, unsigned int DataSize);

Ich kann übrigens keinerlei Sinn in deinem obigen Code erkennen. Was 
soll der denn eigentlich machen?

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