Struktur, auf die gezeigt wird, löschen

Gast #367356
Lesenswert?
• ▲
▼
Ich habe eine Struktur mit verschiedenen Bits. Ich denke, der Aufbau der
Struktur sollte hier keine Rolle spielen. Die Struktur nutze ich, um die
Bits besser auswerten zu können.

Diese Struktur werte ich in einer Funktion aus; Zugriff von anderer
Stelle auf diese Struktur zu diesem Zeitpunkt ist ausgeschlossen.
Nachdem ich die Struktur ausgewertet habe, muss ich sie komplett
löschen - bevor ich wieder Daten in die Struktur fülle.

//globale variable
volatile uint16_t mem_buffer;

//Funktion zum auswerten:
{
struct rx_incomming *rx_buffer;
rx_buffer = (struct rx_incomming *)(uint16_t)&mem_buffer;
//...verschiedenes
//und dann löschen
rx_buffer = 0;
}

Das löschen von rx_buffer, wobei es sich eigentlich um mem_buffer
handelt funktioniert aber nicht. Folge sind falsche Werte in den
nächsten Schritten. ersetze ich "rx_buffer = 0" geg. "mem_buffer =
0" arbeitet es tadellos! Ich kann das nicht ganz nachvollziehen.
lst-File gibt mir auch keinen Aufschluss.

Evtl. hat jemand einen Tipp! Ich nutze solche Funktionalität zum ersten
male (also Struktur über Variable legen (wie nennt man das eigentlich?
;-) ).

Danke
Gast #367359
Lesenswert?
• ▲
▼
Das geht so:
1
struct rx_incomming *rx_buffer;
2
rx_buffer = (struct rx_incomming *) &mem_buffer;
3

4
//und dann löschen
5
memset(rx_buffer, 0, sizeof (struct rx_incomming));

BTW: "incoming" wird mit einem m geschrieben
Gast #367360
Lesenswert?
• ▲
▼
struct rx_incomming *rx_buffer;
*rx_buffer = (struct rx_incomming){0};

memset setzt allerdings auch padding bits zu null
wenn du allerdings immer über -> oder *. zugreifst
dann spielt es keine Rolle

hth, Daniel
Gast #367365
Lesenswert?
• ▲
▼
Du hast nen Pointer auf ne struct deklariert. Wenn Du Deine Werte
löschen willst, darfst Du natürlich nicht den Pointer selbst '0'
setzen, sondern Du musst die Komponenten der Struct löschen. Mit
'rx_buffer = 0' löschst Du aber nur den Zeiger, der dann auf die
Adresse '0' zeigt, was sicher nicht das ist, was Du willst. Einer
struct-Variablen kannst Du aber auch nicht einfach eine '0' zuweisen,
da sie ja vermutlich aus mehreren Komponenten besteht. Deshalb meckert
Dein Compiler auch bei der (für eine einfache Variable, also kein
struct, auch korrekte) Variante '*rx_buffer = 0'. Deshalb spielt die
struct selber eine sogar sehr wichtige Rolle.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.