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ß
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.