free() auf Zufälligen Wert

Gast #877801
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ß
#877809
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.

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