Forum: Compiler & IDEs free() auf Zufälligen Wert


von Gast (Gast)


Lesenswert?

hallo,
was passiert wenn ich free(pointer) aufrufe, aber der Wert in
Wirklichkeit kein richtiger Pointer ist sondern ein zufälliger Wert im
Speicher.

Oder anders gefragt wie kann ich ein Element eines struct mit 0
initialiesieren damit das Problem erst garnicht auftaucht

typedef struct{
  uint8_t preamble;
  uint8_t startcode1;
  uint8_t startcode2;
  uint8_t len;
  uint8_t *data;  // <- sollte immer 0 sein
  uint8_t postamble;
} frame;

void free_frame(frame *frame){
  if(frame->data)
  free(frame->data);

}
main(){

  frame testframe;  // jetzt hat testframe.data einen zufälligen wert :(
  framefree(&testframe)
}


ich arbeite mit dem AVR-GCC.

Gruß

von Karl H. (kbuchegg)


Lesenswert?

Gast wrote:
> hallo,
> was passiert wenn ich free(pointer) aufrufe, aber der Wert in
> Wirklichkeit kein richtiger Pointer ist sondern ein zufälliger Wert im
> Speicher.

undefiniert. Alles mögliche kann passieren.

> Oder anders gefragt wie kann ich ein Element eines struct mit 0
> initialiesieren damit das Problem erst garnicht auftaucht

Indem du dir zb. eine Funktion baust, die dir einen Frame
korrekt initialisiert und diese Funktion für jede neue
Frame Variable aufrufst.


Besser so ...
1
void free_frame(frame *frame)
2
{
3
  if( frame ) {
4
    free( frame->data );
5
    frame->data = NULL;
6
  }
7
}

... dann kannst du dir das if für frame->data in die Haare schmieren.
free darf man mit einem NULL Pointer beliebig oft aufrufen.

von Gast (Gast)


Lesenswert?

danke für die Antwort,
ich hab schon fast befürchtet das es nicht ohne externe Zuweisung geht. 
Naja Pointer die irgendwo hinzeigen sind sowieso das schlimmste ;)

Gruß

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.