etreu Geschrieben 24. November 2010 Teilen Geschrieben 24. November 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 24. November 2010 Teilen Geschrieben 24. November 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 24. November 2010 Autor Teilen Geschrieben 24. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 24. November 2010 Teilen Geschrieben 24. November 2010 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"? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 24. November 2010 Autor Teilen Geschrieben 24. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 24. November 2010 Teilen Geschrieben 24. November 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 24. November 2010 Autor Teilen Geschrieben 24. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 26. November 2010 Autor Teilen Geschrieben 26. November 2010 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 } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 26. November 2010 Autor Teilen Geschrieben 26. November 2010 Okay, dann kann ich aufhören an mir zu zweifeln - dann versteh ich die Welt nicht mehr. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.