Forum: Compiler & IDEs AVR-GCC: free volatile pointer schlägt fehl


von MMGJ (Gast)


Lesenswert?

Hallo!

Ich habe einen volatile Pointer, der auf ein Struct zeigt (das mit dem 
Struct ist eigentlich egal). Ich weise dem Pointer mit malloc eine 
Adresse zu. Ich kann dann auch ganz normal mit dem Pointer arbeiten. 
Allerdings kann ich den Speicher nicht mehr mit free(meinPointer) 
freigeben.
Er meldet mir folgendes:
warning: passing argument 1 of 'free' discards qualifiers from pointer 
target type

Ich wüsste jetzt nichts, was dagegen spricht den Speicher eines volatile 
pointers freizugeben. Ich benutze die aktuelle AVR-GCC Version (ich 
glaub 4.3.3).

Weiß jemand, was ich falsch mache?

Vielen Dank!

MMGJ

von Bastel (Gast)


Lesenswert?

Zeig mal deinen Code.

von Bob (Gast)


Lesenswert?

Einfach beim free-aufruf das volatile wegcasten.

Aber:
Sicher das dein Pointer volatile sein muss, und nicht eher die Struct 
auf die er zeigt?

von Klaus W. (mfgkw)


Lesenswert?

free( (void*)meinpointer );

Hintergrund: free ist deklariert als Funktion, die einen void*
bekommt.
Du übergibst aber keinen void*, sondern einen volatile void*.
Mit einem cast sollte das behoben sein.

von A.H. (Gast)


Lesenswert?

Hast du vielleicht nicht den Pointer, sondern den struct mit volatile 
markiert? Das da kompiliert ohne Fehlermeldung:

char * volatile vcp = NULL;
void foo(){
     vcp = malloc(256);
     free(vcp);
}


Aber mit

volatile char *vcp = NULL;

gibts genau den von dir erwähnten Fehler.

Andreas

von Klaus W. (mfgkw)


Lesenswert?

davon gehe ich auch aus

von MMGJ (Gast)


Lesenswert?

Ähh ja,
das volatile hätte nach dem Stern stehen sollen.
Habs jetzt aber ganz anders gemacht :-D

Danke für eure Antworten, ich werde es in Zukunft gut brauchen können!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.