Veröffentlicht 24. November 201014 j Ich habe gerade ein Problem Zeigern. Kurz sikzziert sieht es in etwa so aus: abc_t* variable; // abc_t ist ein struct mit typedef uint8_t* bytes; // uint8_t ist im prinzip ein alias für char variable = (abc_t*) methodeDieEinVoidZeigerLiefert(); bytes = (uint8_t) variable; Wenn ich jetzt Änderungen an der Struktur von variable vornehme, sollte sich doch der Inhalt von bytes ebenfalls ändern, oder?
24. November 201014 j Wenn ich jetzt Änderungen an der Struktur von variable vornehme, sollte sich doch der Inhalt von bytes ebenfalls ändern, oder?Du bewegst dich da im Bereich des undefinierten Verhalten, aber üblicherweise ist das so. Was ist denn jetzt konkret das Problem?
24. November 201014 j Autor Das ich die Änderungen nicht in dem zweiten Zeige sehe. Gibt es für so etwas einen standartisiertes Vorgehen? Ich will die Daten (des Structs) übertragen und mir vorher die Bytes ansehen.
24. November 201014 j Das ich die Änderungen nicht in dem zweiten Zeige sehe.Was für Änderungen? Was meinst du mit "sehen"? Gibt es für so etwas einen standartisiertes Vorgehen? Ich will die Daten (des Structs) übertragen und mir vorher die Bytes ansehen.Was meinst du mit "ansehen"?
24. November 201014 j Autor Das struct hat ein 16 bit Feld. Gesehen als byte-Array sind das ist {0,0}. Wenn ich dem Attribut den Wer 100 zuweise, dann wollte ich als byte-Array {0,100} erhalten - das meine ich mit sehen. Das struct wird byteweise versendet. Bevor ich es auf der Empfängerseite rekonstruiere, will prüfen, ob auch die richtigen Daten gesendet werden.
24. November 201014 j Das struct hat ein 16 bit Feld.Sonst nichts? Falls doch: Ist dir klar, dass der Compiler gegebenfalls fürs Alignment Füllbytes in deine Struktur packt? Guckst du sicher an der richtigen Stelle ins Array? Wenn ich dem Attribut den Wer 100 zuweise, dann wollte ich als byte-Array {0,100} erhaltenOder {100,0}, je nach Endianness des Systems - die binäre Repräsentation im Speicher ist nicht standardisiert. das meine ich mit sehen.Du hast meine Frage nicht verstanden. Es geht darum, wie du den Inhalt dieses Arrays prüfst. Hast du da ein if im Code, oder lässt du dir das irgendwie ausgeben, oder benutzt du einen Debugger? Gesehen (also mit den Augen) habe ich Bytes bisher noch nicht
24. November 201014 j Autor Sonst nichts? Falls doch: Ist dir klar, dass der Compiler gegebenfalls fürs Alignment Füllbytes in deine Struktur packt? Guckst du sicher an der richtigen Stelle ins Array? Natürlich hat das struct noch ein paar Felder mehr. Eines der Felder ist ein Pointer auf eine andere Datenstruktur. Oder {100,0}, je nach Endianness des Systems - die binäre Repräsentation im Speicher ist nicht standardisiert. Ist klar. Ich lasse mir das Array in einer Schleife via printf ausgeben - Debugger oder änhliches ist auf der Plattform etwas komplizierter.
26. November 201014 j Autor Andere Frage zum Verständnis. Die beiden gekennzeichneten Ausgaben sollten doch die selben Werte liefern, oder? for (i = 0; i < neighbourtable.numNeighbours; i++) { #ifdef SHOW_PRINTF printf("append neigh: %d@%lu\n", neighbourtable.entries[i].info.nodeId, neighbourtable.entries[i].info.sqn); printfflush(); #endif memcpy(neighbourhood->entries + i, &neighbourtable.entries[i].info,sizeof(neighbour_info_entry_t)); #ifdef SHOW_PRINTF printf("appended: %d::%d@%lu\n",i, neighbourhood->entries[i].nodeId, neighbourhood->entries[i].sqn); // AUSGABE 1 #endif } for (i = 0; i < neighbourtable.numNeighbours; i++) { #ifdef SHOW_PRINTF printf("check neigh %d: %d@%lu\n",i, neighbourhood->entries[i].nodeId, neighbourhood->entries[i].sqn); // AUSGABE 2 printfflush(); #endif }
26. November 201014 j Andere Frage zum Verständnis. Die beiden gekennzeichneten Ausgaben sollten doch die selben Werte liefern, oder?Wenn sonst nichts dazwischen steht und kein anderer Thread dazwischen funkt und und und ... dann ja.
26. November 201014 j Autor Okay, dann kann ich aufhören an mir zu zweifeln - dann versteh ich die Welt nicht mehr.
26. November 201014 j Okay, dann kann ich aufhören an mir zu zweifeln - dann versteh ich die Welt nicht mehr.Dann gib uns doch mal die Möglichkeit, dir zu helfen, indem du das konkrete Problem beschreibst. Am besten mit einem Minimalbeispiel, das den Fehler reproduziert. Das Herumgeeiere mit Verständnisfragen bringt dich ja offensichtlich nicht weiter.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.