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
Einfach beim free-aufruf das volatile wegcasten. Aber: Sicher das dein Pointer volatile sein muss, und nicht eher die Struct auf die er zeigt?
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.
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
Ä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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.