mikrocontroller.net

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


Autor: MMGJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bastel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig mal deinen Code.

Autor: Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
davon gehe ich auch aus

Autor: MMGJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.